summaryrefslogtreecommitdiff
path: root/Source/cmNinjaTargetGenerator.cxx
diff options
context:
space:
mode:
authorPeter Kuemmel <syntheticpp@gmx.net>2012-06-07 23:34:48 +0200
committerPeter Kuemmel <syntheticpp@gmx.net>2012-06-07 23:34:48 +0200
commit1d40729eaa35dd643efdf5e793e6a541e890f33a (patch)
tree71804fd987618c253ee73e54b600c82aea740eeb /Source/cmNinjaTargetGenerator.cxx
parente3a1f727f75e6077e7724719c606d833e8bbd9b0 (diff)
downloadcmake-1d40729eaa35dd643efdf5e793e6a541e890f33a.tar.gz
Ninja: add dependency tracking for msvc with cldeps
Diffstat (limited to 'Source/cmNinjaTargetGenerator.cxx')
-rw-r--r--Source/cmNinjaTargetGenerator.cxx12
1 files changed, 10 insertions, 2 deletions
diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx
index e419a4d541..74b5c9213b 100644
--- a/Source/cmNinjaTargetGenerator.cxx
+++ b/Source/cmNinjaTargetGenerator.cxx
@@ -330,12 +330,17 @@ cmNinjaTargetGenerator
vars.Defines = "$DEFINES";
vars.TargetPDB = "$TARGET_PDB";
+ bool cldeps = false;
+ const char* cc = this->GetMakefile()->GetDefinition("CMAKE_C_COMPILER");
+ if(cc && std::string(cc).find("cl.exe") != std::string::npos)
+ cldeps = true;
+
std::string depfile;
std::string depfileFlagsName = "CMAKE_DEPFILE_FLAGS_" + language;
const char *depfileFlags =
this->GetMakefile()->GetDefinition(depfileFlagsName.c_str());
- if (depfileFlags) {
- std::string depfileFlagsStr = depfileFlags;
+ if (depfileFlags || cldeps) {
+ std::string depfileFlagsStr = depfileFlags ? depfileFlags : "";
depfile = "$out.d";
cmSystemTools::ReplaceString(depfileFlagsStr, "<DEPFILE>",
depfile.c_str());
@@ -364,6 +369,9 @@ cmNinjaTargetGenerator
std::string cmdLine =
this->GetLocalGenerator()->BuildCommandLine(compileCmds);
+ if(cldeps)
+ cmdLine = "cldeps.exe $out.d $out " + cmdLine;
+
// Write the rule for compiling file of the given language.
std::ostringstream comment;
comment << "Rule for compiling " << language << " files.";