|
|
@@ -202,6 +202,22 @@ void cmLocalGenerator::ComputeObjectMaxPath()
|
|
|
this->ObjectMaxPathViolations.clear();
|
|
|
}
|
|
|
|
|
|
+void cmLocalGenerator::MoveSystemIncludesToEnd(
|
|
|
+ std::vector<std::string>& includeDirs, const std::string& config,
|
|
|
+ const std::string& lang, const cmGeneratorTarget* target) const
|
|
|
+{
|
|
|
+ if (!target) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ std::stable_sort(
|
|
|
+ includeDirs.begin(), includeDirs.end(),
|
|
|
+ [&target, &config, &lang](std::string const& a, std::string const& b) {
|
|
|
+ return !target->IsSystemIncludeDirectory(a, config, lang) &&
|
|
|
+ target->IsSystemIncludeDirectory(b, config, lang);
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
void cmLocalGenerator::TraceDependencies()
|
|
|
{
|
|
|
std::vector<std::string> configs;
|
|
|
@@ -651,7 +667,7 @@ std::string cmLocalGenerator::ConvertToIncludeReference(
|
|
|
}
|
|
|
|
|
|
std::string cmLocalGenerator::GetIncludeFlags(
|
|
|
- const std::vector<std::string>& includes, cmGeneratorTarget* target,
|
|
|
+ const std::vector<std::string>& includeDirs, cmGeneratorTarget* target,
|
|
|
const std::string& lang, bool forceFullPaths, bool forResponseFile,
|
|
|
const std::string& config)
|
|
|
{
|
|
|
@@ -659,6 +675,9 @@ std::string cmLocalGenerator::GetIncludeFlags(
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
+ std::vector<std::string> includes = includeDirs;
|
|
|
+ this->MoveSystemIncludesToEnd(includes, config, lang, target);
|
|
|
+
|
|
|
OutputFormat shellFormat = forResponseFile ? RESPONSE : SHELL;
|
|
|
std::ostringstream includeFlags;
|
|
|
|
|
|
@@ -924,6 +943,8 @@ void cmLocalGenerator::GetIncludeDirectories(std::vector<std::string>& dirs,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ this->MoveSystemIncludesToEnd(dirs, config, lang, target);
|
|
|
+
|
|
|
// Add standard include directories for this language.
|
|
|
// We do not filter out implicit directories here.
|
|
|
std::string const standardIncludesVar =
|