Commit 7985bc11 authored by Bill Hoffman's avatar Bill Hoffman
Browse files

ENH: add a rule to automatically re-run cmake from the top if the CMakeCache.txt file is changed

parent 83f596ee
......@@ -456,8 +456,18 @@ bool cmCacheManager::SaveCache(const char* path)
cmSystemTools::CopyFileIfDifferent(tempFile.c_str(),
cacheFile.c_str());
cmSystemTools::RemoveFile(tempFile.c_str());
return true;
std::string checkCacheFile = path;
checkCacheFile += "/cmake.check_cache";
std::ofstream checkCache(checkCacheFile.c_str());
if(!checkCache)
{
cmSystemTools::Error("Unable to open check cache file for write. ",
checkCacheFile.c_str());
return false;
}
checkCache << "# This file is generated by cmake for dependency checking of the CMakeCache.txt file\n";
return true;
}
void cmCacheManager::OutputHelpString(std::ofstream& fout,
const std::string& helpString)
......
......@@ -214,13 +214,14 @@ void cmLocalUnixMakefileGenerator::OutputMakefile(const char* file,
cacheFile += "/CMakeCache.txt";
fout << " " << cmSystemTools::ConvertToOutputPath(cacheFile.c_str());
fout << "\n\n\n";
this->OutputMakeVariables(fout);
this->OutputMakeVariables(fout);
// Set up the default target as the VERY first target, so that make with no arguments will run it
this->
OutputMakeRule(fout,
"Default target executed when no arguments are given to make, first make sure cmake.depends exists, cmake.check_depends is up-to-date, check the sources, then build the all target",
"default_target",
0,
"$(CMAKE_BINARY_DIR)/cmake.check_cache",
"$(MAKE) $(MAKESILENT) cmake.depends",
"$(MAKE) $(MAKESILENT) cmake.check_depends",
"$(MAKE) $(MAKESILENT) -f cmake.check_depends",
......@@ -1568,6 +1569,7 @@ void cmLocalUnixMakefileGenerator::OutputSubDirectoryRules(std::ostream& fout)
{
return;
}
this->OutputSubDirectoryVars(fout,
"SUBDIR_BUILD",
"default_target",
......@@ -2120,6 +2122,12 @@ void cmLocalUnixMakefileGenerator::OutputMakeRules(std::ostream& fout)
"$(CMAKE_BINARY_DIR)/CMakeCache.txt",
"$(CMAKE_COMMAND) "
"-H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)");
this->OutputMakeRule(fout,
"CMakeCache.txt because out-of-date:",
"$(CMAKE_BINARY_DIR)/cmake.check_cache",
"$(CMAKE_BINARY_DIR)/CMakeCache.txt",
"$(CMAKE_COMMAND) "
"-H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)");
// if CMAKE_EDIT_COMMAND is defined then add a rule to run it
// called edit_cache
if(m_Makefile->GetDefinition("CMAKE_EDIT_COMMAND"))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment