summaryrefslogtreecommitdiffstats
path: root/Source/cmGeneratorExpressionNode.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2017-11-17 19:46:53 (GMT)
committerBrad King <brad.king@kitware.com>2017-11-20 18:51:25 (GMT)
commit2ae880fa8f04a2026939b1df9613b64a301aa522 (patch)
treea0b87a17d369cb7b81360752bdbb8ab4d9ebdd29 /Source/cmGeneratorExpressionNode.cxx
parent2b7d59f3109483bfa45dc41e2a2f6a2f82addfec (diff)
downloadCMake-2ae880fa8f04a2026939b1df9613b64a301aa522.zip
CMake-2ae880fa8f04a2026939b1df9613b64a301aa522.tar.gz
CMake-2ae880fa8f04a2026939b1df9613b64a301aa522.tar.bz2
Genex: Enable COMPILE_LANGUAGE for COMPILE_OPTIONS with Visual Studio
Since commit v3.9.0-rc4~3^2~1 (VS: Fix target_compile_options for CUDA, 2017-06-21), the evaluation of `COMPILE_LANGUAGE` receives the proper language. The set of compile flags used for a target's C and C++ sources is based on the linker language. By default this is always the C++ flags if any C++ sources appear in the target, and otherwise the C flags. Therefore we can define the `COMPILE_LANGUAGE` generator expression in `COMPILE_OPTIONS` to match the selected language. This is not exactly the same as for other generators, but is the best VS can do. It is also sufficient for many use cases since the set of allowed flags for C and C++ is almost the same in Visual Studio. Furthermore, since the VS generator moves many of the flags to declarative `.vcxproj` elements, it will automatically avoid passing C++ flags for C sources. Issue: #17435
Diffstat (limited to 'Source/cmGeneratorExpressionNode.cxx')
-rw-r--r--Source/cmGeneratorExpressionNode.cxx5
1 files changed, 2 insertions, 3 deletions
diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx
index 5068560..3d311d6 100644
--- a/Source/cmGeneratorExpressionNode.cxx
+++ b/Source/cmGeneratorExpressionNode.cxx
@@ -829,12 +829,11 @@ static const struct CompileLanguageNode : public cmGeneratorExpressionNode
std::string genName = gg->GetName();
if (genName.find("Visual Studio") != std::string::npos) {
if (dagChecker && (dagChecker->EvaluatingCompileDefinitions() ||
- dagChecker->EvaluatingCompileOptions() ||
dagChecker->EvaluatingIncludeDirectories())) {
reportError(
context, content->GetOriginalExpression(),
- "$<COMPILE_LANGUAGE:...> may only be used for file(GENERATE) "
- "with the Visual Studio generator.");
+ "$<COMPILE_LANGUAGE:...> may only be used for COMPILE_OPTIONS "
+ "and file(GENERATE) with the Visual Studio generator.");
return std::string();
}
} else if (genName.find("Xcode") != std::string::npos) {