瀏覽代碼

BUG: hack fix for problem of MS vs 6 and custom target commands

Bill Hoffman 22 年之前
父節點
當前提交
eff0a824c4
共有 2 個文件被更改,包括 27 次插入3 次删除
  1. 5 0
      Source/cmLocalVisualStudio6Generator.cxx
  2. 22 3
      Source/cmMakefile.cxx

+ 5 - 0
Source/cmLocalVisualStudio6Generator.cxx

@@ -253,6 +253,11 @@ void cmLocalVisualStudio6Generator::WriteDSPFile(std::ostream& fout,
               m_Makefile->GetStartOutputDirectory(),
               libName, count);
       std::vector<std::string> args;
+      // This is a hack to fix a problem with cmCustomCommand
+      // The cmCustomCommand should store the arguments as a vector
+      // and not a string, and the cmAddCustomTargetCommand should
+      // not EscapeSpaces.
+      args.push_back("This is really a single argument do not escape spaces");
       args.push_back(cc.GetArguments());
       m_Makefile->AddCustomCommandToOutput(output, 
                                            cc.GetCommand().c_str(), 

+ 22 - 3
Source/cmMakefile.cxx

@@ -570,12 +570,31 @@ AddCustomCommandToOutput(const char* outputIn,
   command = cmSystemTools::EscapeSpaces(command.c_str());  
   
   unsigned int i;
+  bool escapeSpaces = true;
   for (i = 0; i < commandArgs.size(); ++i)
     {
     expandC = commandArgs[i].c_str();
-    this->ExpandVariablesInString(expandC);
-    combinedArgs += cmSystemTools::EscapeSpaces(expandC.c_str());
-    combinedArgs += " ";
+    // This is a hack to fix a problem with cmCustomCommand
+    // The cmCustomCommand should store the arguments as a vector
+    // and not a string, and the cmAddCustomTargetCommand should
+    // not EscapeSpaces.
+    if(expandC == "This is really a single argument do not escape spaces")
+      {
+      escapeSpaces = false;
+      }
+    else
+      {
+      this->ExpandVariablesInString(expandC);
+      if(escapeSpaces)
+        {
+        combinedArgs += cmSystemTools::EscapeSpaces(expandC.c_str());
+        }
+      else
+        {
+        combinedArgs += expandC;
+        }
+      combinedArgs += " ";
+      }
     }
   cmSourceFile *file = 0;