Makefile,Ninja: Use tool-specific response file flag for include dirs

When we use a response file for `-I` flags, not all compilers support
the `@<file>` syntax.  Define `CMAKE_<LANG>_RESPONSE_FILE_FLAG` to
specify tool-specific flag, just as we do for linking already via
`CMAKE_<LANG>_RESPONSE_FILE_LINK_FLAG`.
This commit is contained in:
Brad King
2018-01-24 10:28:09 -05:00
parent 05e9cdb81e
commit e342e4100a
2 changed files with 17 additions and 4 deletions

View File

@@ -1625,10 +1625,17 @@ void cmMakefileTargetGenerator::AddIncludeFlags(std::string& flags,
}
if (useResponseFile) {
std::string const responseFlagVar =
"CMAKE_" + lang + "_RESPONSE_FILE_FLAG";
std::string responseFlag =
this->Makefile->GetSafeDefinition(responseFlagVar);
if (responseFlag.empty()) {
responseFlag = "@";
}
std::string name = "includes_";
name += lang;
name += ".rsp";
std::string arg = "@" +
std::string arg = std::move(responseFlag) +
this->CreateResponseFile(name.c_str(), includeFlags,
this->FlagFileDepends[lang]);
this->LocalGenerator->AppendFlags(flags, arg);

View File

@@ -416,14 +416,20 @@ void cmNinjaTargetGenerator::WriteCompileRule(const std::string& lang)
std::string flags = "$FLAGS";
std::string rspfile;
std::string rspcontent;
std::string responseFlag;
bool const lang_supports_response = !(lang == "RC" || lang == "CUDA");
if (lang_supports_response && this->ForceResponseFile()) {
std::string const responseFlagVar =
"CMAKE_" + lang + "_RESPONSE_FILE_FLAG";
std::string responseFlag =
this->Makefile->GetSafeDefinition(responseFlagVar);
if (responseFlag.empty()) {
responseFlag = "@";
}
rspfile = "$RSP_FILE";
responseFlag = "@" + rspfile;
responseFlag += rspfile;
rspcontent = " $DEFINES $INCLUDES $FLAGS";
flags = responseFlag;
flags = std::move(responseFlag);
vars.Defines = "";
vars.Includes = "";
}