1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-14 02:08:27 +08:00

VS: Place per-source preprocessor definitions after target-wide ones

When the VS 2010+ generators were first implemented in commit 7491f52992
(ENH: first pass at VS 10, can bootstrap CMake, but many tests still
fail, 2009-06-25, v2.8.0~546), the per-source preprocessor definitions
were placed before target-wide preprocessor definitions for consistency
with the behavior of VS 9 2008 and below.  However, those generators
are not used much anymore.  Instead prefer consistency with the order
used by the Ninja and Makefile generators.
This commit is contained in:
Brad King
2021-06-03 10:36:06 -04:00
parent 9c33ff4dda
commit c48d2d8480
2 changed files with 11 additions and 6 deletions

View File

@@ -0,0 +1,7 @@
compile-options-order
---------------------
* The :ref:`Visual Studio Generators` for VS 2010 and above now place
per-source preprocessor definitions after target-wide preprocssor
definitions. This makes VS consistent with the :ref:`Ninja Generators`
and the :ref:`Makefile Generators`.

View File

@@ -418,7 +418,9 @@ void cmVisualStudioGeneratorOptions::OutputPreprocessorDefinitions(
}
std::ostringstream oss;
const char* sep = "";
if (this->Version >= cmGlobalVisualStudioGenerator::VS10) {
oss << "%(" << tag << ")";
}
std::vector<std::string>::const_iterator de =
cmRemoveDuplicates(this->Defines);
for (std::string const& di : cmMakeRange(this->Defines.cbegin(), de)) {
@@ -437,11 +439,7 @@ void cmVisualStudioGeneratorOptions::OutputPreprocessorDefinitions(
}
}
// Store the flag in the project file.
oss << sep << define;
sep = ";";
}
if (this->Version >= cmGlobalVisualStudioGenerator::VS10) {
oss << ";%(" << tag << ")";
oss << ';' << define;
}
this->OutputFlag(fout, indent, tag, oss.str());