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

This commit is contained in:
Bill Hoffman 2006-03-09 15:47:18 -05:00
parent 15b5869b46
commit 8cdb87eaa7
2 changed files with 24 additions and 1 deletions

View File

@ -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)
{

View File

@ -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,