mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 02:39:48 -06:00
VS: Factor out check for mixed C and C++ target
This commit is contained in:
@@ -3354,6 +3354,14 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions(
|
||||
this->LocalGenerator->AddCompileOptions(flags, this->GeneratorTarget,
|
||||
langForClCompile, configName);
|
||||
}
|
||||
bool const isCXXwithC = [this, &configName]() -> bool {
|
||||
if (this->LangForClCompile != "CXX"_s) {
|
||||
return false;
|
||||
}
|
||||
std::set<std::string> languages;
|
||||
this->GeneratorTarget->GetLanguages(languages, configName);
|
||||
return languages.find("C") != languages.end();
|
||||
}();
|
||||
|
||||
// Put the IPO enabled configurations into a set.
|
||||
if (this->GeneratorTarget->IsIPOEnabled(linkLanguage, configName)) {
|
||||
@@ -3504,21 +3512,17 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions(
|
||||
}
|
||||
|
||||
// Add C-specific flags expressible in a ClCompile meant for C++.
|
||||
if (langForClCompile == "CXX"_s) {
|
||||
std::set<std::string> languages;
|
||||
this->GeneratorTarget->GetLanguages(languages, configName);
|
||||
if (languages.count("C")) {
|
||||
std::string flagsC;
|
||||
this->LocalGenerator->AddLanguageFlags(
|
||||
flagsC, this->GeneratorTarget, cmBuildStep::Compile, "C", configName);
|
||||
this->LocalGenerator->AddCompileOptions(flagsC, this->GeneratorTarget,
|
||||
"C", configName);
|
||||
Options optC(this->LocalGenerator, Options::Compiler,
|
||||
gg->GetClFlagTable());
|
||||
optC.Parse(flagsC);
|
||||
if (const char* stdC = optC.GetFlag("LanguageStandard_C")) {
|
||||
clOptions.AddFlag("LanguageStandard_C", stdC);
|
||||
}
|
||||
if (isCXXwithC) {
|
||||
std::string flagsC;
|
||||
this->LocalGenerator->AddLanguageFlags(
|
||||
flagsC, this->GeneratorTarget, cmBuildStep::Compile, "C", configName);
|
||||
this->LocalGenerator->AddCompileOptions(flagsC, this->GeneratorTarget, "C",
|
||||
configName);
|
||||
Options optC(this->LocalGenerator, Options::Compiler,
|
||||
gg->GetClFlagTable());
|
||||
optC.Parse(flagsC);
|
||||
if (const char* stdC = optC.GetFlag("LanguageStandard_C")) {
|
||||
clOptions.AddFlag("LanguageStandard_C", stdC);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user