diff options
author | Josiah Bills <Josiah.Bills@radiancetech.com> | 2022-05-03 20:38:07 (GMT) |
---|---|---|
committer | Josiah Bills <josiah@adoniram.net> | 2022-05-18 22:52:00 (GMT) |
commit | 7a2496daad2ed9d16c54ce7cb64694caaafc7f70 (patch) | |
tree | 532558136978feaebdb7246b05328ddee9bc93c2 /Source/cmVisualStudio10TargetGenerator.cxx | |
parent | e0dbca93aae6b01f8b239d346a0bc99d2ca2473e (diff) | |
download | CMake-7a2496daad2ed9d16c54ce7cb64694caaafc7f70.zip CMake-7a2496daad2ed9d16c54ce7cb64694caaafc7f70.tar.gz CMake-7a2496daad2ed9d16c54ce7cb64694caaafc7f70.tar.bz2 |
VS: Add support for SYSTEM include directories
Fixes: #17904
Diffstat (limited to 'Source/cmVisualStudio10TargetGenerator.cxx')
-rw-r--r-- | Source/cmVisualStudio10TargetGenerator.cxx | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index cf0cb17..e5d9ba5 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -3356,6 +3356,43 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions( } } + // Get includes for this target + if (!this->LangForClCompile.empty()) { + auto includeList = this->GetIncludes(configName, this->LangForClCompile); + + auto sysIncludeFlag = this->Makefile->GetDefinition( + cmStrCat("CMAKE_INCLUDE_SYSTEM_FLAG_", this->LangForClCompile)); + + if (sysIncludeFlag) { + bool gotOneSys = false; + for (auto i : includeList) { + cmSystemTools::ConvertToUnixSlashes(i); + if (this->GeneratorTarget->IsSystemIncludeDirectory( + i, configName, this->LangForClCompile)) { + auto flag = cmTrimWhitespace(*sysIncludeFlag); + if (this->MSTools) { + cmSystemTools::ReplaceString(flag, "-external:I", "/external:I"); + } + clOptions.AppendFlagString("AdditionalOptions", + cmStrCat(flag, " \"", i, '"')); + gotOneSys = true; + } else { + clOptions.AddInclude(i); + } + } + + if (gotOneSys) { + if (auto sysIncludeFlagWarning = this->Makefile->GetDefinition( + cmStrCat("_CMAKE_INCLUDE_SYSTEM_FLAG_", this->LangForClCompile, + "_WARNING"))) { + flags = cmStrCat(flags, ' ', *sysIncludeFlagWarning); + } + } + } else { + clOptions.AddIncludes(includeList); + } + } + clOptions.Parse(flags); clOptions.Parse(defineFlags); std::vector<std::string> targetDefines; @@ -3382,12 +3419,6 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions( clOptions.AppendFlag("DefineConstants", targetDefines); } - // Get includes for this target - if (!this->LangForClCompile.empty()) { - clOptions.AddIncludes( - this->GetIncludes(configName, this->LangForClCompile)); - } - if (this->MSTools) { clOptions.SetVerboseMakefile( this->Makefile->IsOn("CMAKE_VERBOSE_MAKEFILE")); |