Kaynağa Gözat

ENH: working directory working for XCode

Bill Hoffman 20 yıl önce
ebeveyn
işleme
55dd61946b
2 değiştirilmiş dosya ile 15 ekleme ve 6 silme
  1. 2 2
      Source/CMakeLists.txt
  2. 13 4
      Source/cmGlobalXCodeGenerator.cxx

+ 2 - 2
Source/CMakeLists.txt

@@ -365,7 +365,7 @@ IF(BUILD_TESTING)
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/CustomCommand/bin"
     --test-command CustomCommand
     )
-IF(FALSE)
+
   ADD_TEST(CustomCommandWorkingDirectory  ${CMAKE_CTEST_COMMAND}
     --build-and-test 
     "${CMake_SOURCE_DIR}/Tests/CustomCommandWorkingDirectory"
@@ -377,7 +377,7 @@ IF(FALSE)
     --build-exe-dir "${CMake_BINARY_DIR}/Tests/CustomCommandWorkingDirectory"
     --test-command working
     )
-ENDIF(FALSE)
+
   ADD_TEST(FindPackageTest ${CMAKE_CTEST_COMMAND}
     --build-and-test 
     "${CMake_SOURCE_DIR}/Tests/FindPackageTest"

+ 13 - 4
Source/cmGlobalXCodeGenerator.cxx

@@ -342,8 +342,9 @@ cmGlobalXCodeGenerator::AddExtraTargets(cmLocalGenerator* root,
     }
   cmCustomCommandLines commandLines;
   commandLines.push_back(makecommand);
-  mf->AddUtilityCommand("XCODE_DEPEND_HELPER", false, no_output, no_depends,
+  mf->AddUtilityCommand("XCODE_DEPEND_HELPER", false, no_output,
                         no_working_directory,
+                        no_depends,
                         commandLines);
 
   // Add Re-Run CMake rules
@@ -966,9 +967,17 @@ cmGlobalXCodeGenerator::AddCommandsToBuildPhase(cmXCodeObject* buildphase,
         {
         // Build the command line in a single string.
         const cmCustomCommandLine& commandLine = *cl;
-        std::string cmd = commandLine[0];
-        cmSystemTools::ReplaceString(cmd, "/./", "/");
-        cmd = this->ConvertToRelativeForMake(cmd.c_str());
+        std::string cmd2 = commandLine[0];
+        cmSystemTools::ReplaceString(cmd2, "/./", "/");
+        cmd2 = this->ConvertToRelativeForMake(cmd2.c_str());
+        std::string cmd;
+        if(cc.GetWorkingDirectory())
+          {
+          cmd += "cd ";
+          cmd += this->ConvertToRelativeForMake(cc.GetWorkingDirectory());
+          cmd += " && ";
+          }
+        cmd += cmd2;
         for(unsigned int j=1; j < commandLine.size(); ++j)
           {
           cmd += " ";