public HashSet<CMakeDirectory> EnumerateSubdirectories()
        {
            if (bSubdirectoriesEnumerated) return subdirectories;

            foreach (DirectoryInfo dinfo in from d in directory.EnumerateDirectories()
                                            where (d.Attributes & FileAttributes.Hidden) == 0
                                            select d)
            {
                CMakeDirectory cd = new CMakeDirectory(dinfo);
                foreach (FileInfo finfo in from f in directory.EnumerateFiles()
                                           where (f.Attributes & FileAttributes.Hidden) == 0
                                           select f)
                {
                    cd.sources.Add(finfo);
                }
                subdirectories.Add(cd);
            }
            bSubdirectoriesEnumerated = true;
            return subdirectories;
        }
 public CMakeProject(String Name, CMakeDirectory rootDirectory)
 {
     this.Name = Name;
     this.rootDirectory = rootDirectory;
 }