|
@@ -1355,8 +1355,13 @@ bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags(
|
|
|
objectName = this->GeneratorTarget->GetObjectName(&sf);
|
|
|
}
|
|
|
std::string flags;
|
|
|
+ bool configDependentFlags = false;
|
|
|
std::string defines;
|
|
|
if (const char* cflags = sf.GetProperty("COMPILE_FLAGS")) {
|
|
|
+
|
|
|
+ if (cmGeneratorExpression::Find(cflags) != std::string::npos) {
|
|
|
+ configDependentFlags = true;
|
|
|
+ }
|
|
|
flags += cflags;
|
|
|
}
|
|
|
if (const char* cdefs = sf.GetProperty("COMPILE_DEFINITIONS")) {
|
|
@@ -1412,7 +1417,8 @@ bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags(
|
|
|
}
|
|
|
// if we have flags or defines for this config then
|
|
|
// use them
|
|
|
- if (!flags.empty() || !configDefines.empty() || compileAs || noWinRT) {
|
|
|
+ if (!flags.empty() || configDependentFlags || !configDefines.empty() ||
|
|
|
+ compileAs || noWinRT) {
|
|
|
(*this->BuildFileStream) << firstString;
|
|
|
firstString = ""; // only do firstString once
|
|
|
hasFlags = true;
|
|
@@ -1427,7 +1433,15 @@ bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags(
|
|
|
if (noWinRT) {
|
|
|
clOptions.AddFlag("CompileAsWinRT", "false");
|
|
|
}
|
|
|
- clOptions.Parse(flags.c_str());
|
|
|
+ if (configDependentFlags) {
|
|
|
+ cmGeneratorExpression ge;
|
|
|
+ CM_AUTO_PTR<cmCompiledGeneratorExpression> cge = ge.Parse(flags);
|
|
|
+ std::string evaluatedFlags =
|
|
|
+ cge->Evaluate(this->LocalGenerator, *config);
|
|
|
+ clOptions.Parse(evaluatedFlags.c_str());
|
|
|
+ } else {
|
|
|
+ clOptions.Parse(flags.c_str());
|
|
|
+ }
|
|
|
if (clOptions.HasFlag("AdditionalIncludeDirectories")) {
|
|
|
clOptions.AppendFlag("AdditionalIncludeDirectories",
|
|
|
"%(AdditionalIncludeDirectories)");
|