BUG: also put a variable into the cache when defined using -D if no type is
given, then STRING is used. Also add command line option -U as suggested for undefining cache variables. This fixes #4896 and #4264. Alex
This commit is contained in:
parent
f94b8cfd3c
commit
0be0283f30
|
@ -299,7 +299,7 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||||
{
|
{
|
||||||
this->CacheManager->AddCacheEntry(var.c_str(), value.c_str(),
|
this->CacheManager->AddCacheEntry(var.c_str(), value.c_str(),
|
||||||
"No help, variable specified on the command line.",
|
"No help, variable specified on the command line.",
|
||||||
type);
|
type==cmCacheManager::UNINITIALIZED?cmCacheManager::STRING:type);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -309,6 +309,49 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(arg.find("-U",0) == 0)
|
||||||
|
{
|
||||||
|
std::string entryPattern = arg.substr(2);
|
||||||
|
if(entryPattern.size() == 0)
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
if(i < args.size())
|
||||||
|
{
|
||||||
|
entryPattern = args[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cmSystemTools::Error("-U must be followed with VAR.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//go through all cache entries and collect the vars which will be removed
|
||||||
|
std::vector<std::string> entriesToDelete;
|
||||||
|
cmCacheManager::CacheIterator it =
|
||||||
|
this->CacheManager->GetCacheIterator();
|
||||||
|
for ( it.Begin(); !it.IsAtEnd(); it.Next() )
|
||||||
|
{
|
||||||
|
cmCacheManager::CacheEntryType t = it.GetType();
|
||||||
|
if(t != cmCacheManager::STATIC && t != cmCacheManager::UNINITIALIZED)
|
||||||
|
{
|
||||||
|
std::string entryName = it.GetName();
|
||||||
|
if (entryName.find(entryPattern) != std::string::npos)
|
||||||
|
{
|
||||||
|
entriesToDelete.push_back(entryName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// now remove them from the cache
|
||||||
|
for(std::vector<std::string>::const_iterator currentEntry =
|
||||||
|
entriesToDelete.begin();
|
||||||
|
currentEntry != entriesToDelete.end();
|
||||||
|
++currentEntry)
|
||||||
|
{
|
||||||
|
this->CacheManager->RemoveCacheEntry(currentEntry->c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
else if(arg.find("-C",0) == 0)
|
else if(arg.find("-C",0) == 0)
|
||||||
{
|
{
|
||||||
std::string path = arg.substr(2);
|
std::string path = arg.substr(2);
|
||||||
|
@ -432,6 +475,10 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||||
{
|
{
|
||||||
// skip for now
|
// skip for now
|
||||||
}
|
}
|
||||||
|
else if(arg.find("-U",0) == 0)
|
||||||
|
{
|
||||||
|
// skip for now
|
||||||
|
}
|
||||||
else if(arg.find("-C",0) == 0)
|
else if(arg.find("-C",0) == 0)
|
||||||
{
|
{
|
||||||
// skip for now
|
// skip for now
|
||||||
|
|
|
@ -388,6 +388,11 @@ private:
|
||||||
"for the project. This option may be used to specify a setting " \
|
"for the project. This option may be used to specify a setting " \
|
||||||
"that takes priority over the project's default value. The option " \
|
"that takes priority over the project's default value. The option " \
|
||||||
"may be repeated for as many cache entries as desired."}, \
|
"may be repeated for as many cache entries as desired."}, \
|
||||||
|
{"-U <var>", "Remove one or more cmake cache entries.", \
|
||||||
|
"This option may be used to remove one or more variables from the " \
|
||||||
|
"CMakeCache.txt file, so that CMake will search them again. All " \
|
||||||
|
"variables which contain \"<var>\" will be removed. The option may be "\
|
||||||
|
"repeated for as many cache entries as desired."}, \
|
||||||
{"-G <generator-name>", "Specify a makefile generator.", \
|
{"-G <generator-name>", "Specify a makefile generator.", \
|
||||||
"CMake may support multiple native build systems on certain platforms. " \
|
"CMake may support multiple native build systems on certain platforms. " \
|
||||||
"A makefile generator is responsible for generating a particular build " \
|
"A makefile generator is responsible for generating a particular build " \
|
||||||
|
|
Loading…
Reference in New Issue