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(),
|
||||
"No help, variable specified on the command line.",
|
||||
type);
|
||||
type==cmCacheManager::UNINITIALIZED?cmCacheManager::STRING:type);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -309,6 +309,49 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
|||
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)
|
||||
{
|
||||
std::string path = arg.substr(2);
|
||||
|
@ -432,6 +475,10 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
|||
{
|
||||
// skip for now
|
||||
}
|
||||
else if(arg.find("-U",0) == 0)
|
||||
{
|
||||
// skip for now
|
||||
}
|
||||
else if(arg.find("-C",0) == 0)
|
||||
{
|
||||
// skip for now
|
||||
|
|
|
@ -388,6 +388,11 @@ private:
|
|||
"for the project. This option may be used to specify a setting " \
|
||||
"that takes priority over the project's default value. The option " \
|
||||
"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.", \
|
||||
"CMake may support multiple native build systems on certain platforms. " \
|
||||
"A makefile generator is responsible for generating a particular build " \
|
||||
|
|
Loading…
Reference in New Issue