diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 168afdec0..424ca0014 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -1561,7 +1561,8 @@ void cmMakefile::AddDefinition(const char* name, const char* value) void cmMakefile::AddCacheDefinition(const char* name, const char* value, const char* doc, - cmCacheManager::CacheEntryType type) + cmCacheManager::CacheEntryType type, + bool force) { const char* val = value; cmCacheManager::CacheIterator it = @@ -1569,7 +1570,12 @@ void cmMakefile::AddCacheDefinition(const char* name, const char* value, if(!it.IsAtEnd() && (it.GetType() == cmCacheManager::UNINITIALIZED) && it.Initialized()) { - val = it.GetValue(); + // if this is not a force, then use the value from the cache + // if it is a force, then use the value being passed in + if(!force) + { + val = it.GetValue(); + } if ( type == cmCacheManager::PATH || type == cmCacheManager::FILEPATH ) { std::vector::size_type cc; diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index 971496d47..5a12d2edc 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -264,7 +264,8 @@ public: ///! Add a definition to this makefile and the global cmake cache. void AddCacheDefinition(const char* name, const char* value, const char* doc, - cmCacheManager::CacheEntryType type); + cmCacheManager::CacheEntryType type, + bool force = false); /** * Add bool variable definition to the build. diff --git a/Source/cmSetCommand.cxx b/Source/cmSetCommand.cxx index 593999050..1be75cee4 100644 --- a/Source/cmSetCommand.cxx +++ b/Source/cmSetCommand.cxx @@ -171,7 +171,7 @@ bool cmSetCommand this->Makefile->AddCacheDefinition(variable, value.c_str(), docstring, - type); + type, force); } else {