summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmTarget.cxx23
1 files changed, 13 insertions, 10 deletions
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 41d370c..5836d7b 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -2266,25 +2266,32 @@ static void processCompileOptionsInternal(cmTarget const* tgt,
for (std::vector<cmTargetInternals::TargetPropertyEntry*>::const_iterator
it = entries.begin(), end = entries.end(); it != end; ++it)
{
- bool cacheOptions = false;
- std::vector<std::string> entryOptions = (*it)->CachedEntries;
- if(entryOptions.empty())
+ std::vector<std::string>& entriesRef = (*it)->CachedEntries;
+ std::vector<std::string> localEntries;
+ std::vector<std::string>* entryOptions = &entriesRef;
+ if(entryOptions->empty())
{
cmSystemTools::ExpandListArgument((*it)->ge->Evaluate(mf,
config,
false,
tgt,
dagChecker),
- entryOptions);
+ localEntries);
if (mf->IsGeneratingBuildSystem()
&& !(*it)->ge->GetHadContextSensitiveCondition())
{
- cacheOptions = true;
+ // Cache the result.
+ *entryOptions = localEntries;
+ }
+ else
+ {
+ // Use the context-sensitive results here.
+ entryOptions = &localEntries;
}
}
std::string usedOptions;
for(std::vector<std::string>::iterator
- li = entryOptions.begin(); li != entryOptions.end(); ++li)
+ li = entryOptions->begin(); li != entryOptions->end(); ++li)
{
std::string opt = *li;
@@ -2297,10 +2304,6 @@ static void processCompileOptionsInternal(cmTarget const* tgt,
}
}
}
- if (cacheOptions)
- {
- (*it)->CachedEntries = entryOptions;
- }
if (!usedOptions.empty())
{
mf->GetCMakeInstance()->IssueMessage(cmake::LOG,