소스 검색

Ninja: Fix POST_BUILD noop on Windows

Use `cd .` instead of `:` in a Windows shell.

Closes: #16393
Brad King 9 년 전
부모
커밋
353f6362ba
4개의 변경된 파일11개의 추가작업 그리고 7개의 파일을 삭제
  1. 5 0
      Source/cmGlobalNinjaGenerator.cxx
  2. 3 0
      Source/cmGlobalNinjaGenerator.h
  3. 2 6
      Source/cmLocalNinjaGenerator.cxx
  4. 1 1
      Source/cmNinjaNormalTargetGenerator.cxx

+ 5 - 0
Source/cmGlobalNinjaGenerator.cxx

@@ -34,6 +34,11 @@
 const char* cmGlobalNinjaGenerator::NINJA_BUILD_FILE = "build.ninja";
 const char* cmGlobalNinjaGenerator::NINJA_RULES_FILE = "rules.ninja";
 const char* cmGlobalNinjaGenerator::INDENT = "  ";
+#ifdef _WIN32
+std::string const cmGlobalNinjaGenerator::SHELL_NOOP = "cd .";
+#else
+std::string const cmGlobalNinjaGenerator::SHELL_NOOP = ":";
+#endif
 
 void cmGlobalNinjaGenerator::Indent(std::ostream& os, int count)
 {

+ 3 - 0
Source/cmGlobalNinjaGenerator.h

@@ -58,6 +58,9 @@ public:
   /// The indentation string used when generating Ninja's build file.
   static const char* INDENT;
 
+  /// The shell command used for a no-op.
+  static std::string const SHELL_NOOP;
+
   /// Write @a count times INDENT level to output stream @a os.
   static void Indent(std::ostream& os, int count);
 

+ 2 - 6
Source/cmLocalNinjaGenerator.cxx

@@ -299,15 +299,11 @@ void cmLocalNinjaGenerator::AppendCustomCommandDeps(
 std::string cmLocalNinjaGenerator::BuildCommandLine(
   const std::vector<std::string>& cmdLines)
 {
-  // If we have no commands but we need to build a command anyway, use ":".
+  // If we have no commands but we need to build a command anyway, use noop.
   // This happens when building a POST_BUILD value for link targets that
   // don't use POST_BUILD.
   if (cmdLines.empty()) {
-#ifdef _WIN32
-    return "cd .";
-#else
-    return ":";
-#endif
+    return cmGlobalNinjaGenerator::SHELL_NOOP;
   }
 
   std::ostringstream cmd;

+ 1 - 1
Source/cmNinjaNormalTargetGenerator.cxx

@@ -675,7 +675,7 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
   if (!symlinkNeeded) {
     vars["POST_BUILD"] = postBuildCmdLine;
   } else {
-    vars["POST_BUILD"] = ":";
+    vars["POST_BUILD"] = cmGlobalNinjaGenerator::SHELL_NOOP;
     symlinkVars["POST_BUILD"] = postBuildCmdLine;
   }
   cmGlobalNinjaGenerator& globalGen = *this->GetGlobalGenerator();