Jelajahi Sumber

Merge topic 'nmake-compile-commands'

37c6a02dc2 CMake: fix nmake compile_commands generation
7583f7490e cmGlobalGenerator: Teach EscapeJSON to escape newlines and tabs

Acked-by: Kitware Robot <[email protected]>
Merge-request: !2648
Craig Scott 7 tahun lalu
induk
melakukan
6f904d0100
2 mengubah file dengan 26 tambahan dan 3 penghapusan
  1. 15 3
      Source/cmGlobalGenerator.cxx
  2. 11 0
      Source/cmMakefileTargetGenerator.cxx

+ 15 - 3
Source/cmGlobalGenerator.cxx

@@ -3023,11 +3023,23 @@ void cmGlobalGenerator::WriteSummary(cmGeneratorTarget* target)
 std::string cmGlobalGenerator::EscapeJSON(const std::string& s)
 {
   std::string result;
+  result.reserve(s.size());
   for (char i : s) {
-    if (i == '"' || i == '\\') {
-      result += '\\';
+    switch (i) {
+      case '"':
+      case '\\':
+        result += '\\';
+        result += i;
+        break;
+      case '\n':
+        result += "\\n";
+        break;
+      case '\t':
+        result += "\\t";
+        break;
+      default:
+        result += i;
     }
-    result += i;
   }
   return result;
 }

+ 11 - 0
Source/cmMakefileTargetGenerator.cxx

@@ -687,6 +687,17 @@ void cmMakefileTargetGenerator::WriteObjectBuildFile(
       std::string langIncludes = std::string("$(") + lang + "_INCLUDES)";
       compileCommand.replace(compileCommand.find(langIncludes),
                              langIncludes.size(), this->GetIncludes(lang));
+
+      const char* eliminate[] = {
+        this->Makefile->GetDefinition("CMAKE_START_TEMP_FILE"),
+        this->Makefile->GetDefinition("CMAKE_END_TEMP_FILE")
+      };
+      for (const char* el : eliminate) {
+        if (el) {
+          cmSystemTools::ReplaceString(compileCommand, el, "");
+        }
+      }
+
       this->GlobalGenerator->AddCXXCompileCommand(
         source.GetFullPath(), workingDirectory, compileCommand);
     }