Просмотр исходного кода

ENH: if CMakeCache.txt has been removed, then automatically remove CMakefiles/*.cmake

Bill Hoffman 20 лет назад
Родитель
Сommit
8cdb87eaa7
2 измененных файлов с 24 добавлено и 1 удалено
  1. 21 0
      Source/cmCacheManager.cxx
  2. 3 1
      Source/cmCacheManager.h

+ 21 - 0
Source/cmCacheManager.cxx

@@ -19,6 +19,7 @@
 #include "cmSystemTools.h"
 #include "cmCacheManager.h"
 #include "cmMakefile.h"
+#include "cmGlob.h"
 #include <cmsys/Directory.hxx>
 
 #include <cmsys/RegularExpression.hxx>
@@ -154,6 +155,20 @@ bool cmCacheManager::ParseEntry(const char* entry,
   return flag;
 }
 
+void cmCacheManager::CleanCMakeFiles(const char* path)
+{
+  std::string glob = path;
+  glob += "/CMakeFiles/*.cmake";
+  cmGlob globIt;
+  globIt.FindFiles(glob);
+  std::vector<std::string> files = globIt.GetFiles();
+  for(std::vector<std::string>::iterator i = files.begin();
+      i != files.end(); ++i)
+    {
+    cmSystemTools::RemoveFile(i->c_str());
+    }
+}
+
 bool cmCacheManager::LoadCache(const char* path,
                                bool internal,
                                std::set<cmStdString>& excludes,
@@ -166,6 +181,12 @@ bool cmCacheManager::LoadCache(const char* path,
     {
     m_Cache.clear();
     }
+  if(!cmSystemTools::FileExists(cacheFile.c_str()))
+    {
+    this->CleanCMakeFiles(path);
+    return false;
+    }
+  
   std::ifstream fin(cacheFile.c_str());
   if(!fin)
     {

+ 3 - 1
Source/cmCacheManager.h

@@ -150,7 +150,9 @@ protected:
 
   ///! Get a cache entry object for a key
   CacheEntry *GetCacheEntry(const char *key);
-
+  ///! Clean out the CMakeFiles directory if no CMakeCache.txt
+  void CleanCMakeFiles(const char* path);
+  
 private:
   typedef  std::map<cmStdString, CacheEntry> CacheEntryMap;
   static void OutputHelpString(std::ofstream& fout,