瀏覽代碼

Fix working drive of make rules on Windows

Teach cmLocalUnixMakefileGenerator3::CreateCDCommand to change working
directories for make tools using a Windows shell using "cd /d" instead
of just "cd".  This tells the shell to change the current drive letter
as well as the working directory on that drive.

Commit abaa0267 (When the working directory for a custom command is on
another drive..., 2007-12-17) fixed the same problem for VS IDE
generators as reported by issue #6150.
Brad King 14 年之前
父節點
當前提交
b5676134ce
共有 1 個文件被更改,包括 6 次插入3 次删除
  1. 6 3
      Source/cmLocalUnixMakefileGenerator3.cxx

+ 6 - 3
Source/cmLocalUnixMakefileGenerator3.cxx

@@ -2228,17 +2228,20 @@ void cmLocalUnixMakefileGenerator3
     return;
     }
 
+  // In a Windows shell we must change drive letter too.
+  const char* cd_cmd = this->WindowsShell? "cd /d " : "cd ";
+
   if(!this->UnixCD)
     {
     // On Windows we must perform each step separately and then change
     // back because the shell keeps the working directory between
     // commands.
-    std::string cmd = "cd ";
+    std::string cmd = cd_cmd;
     cmd += this->ConvertToOutputForExisting(tgtDir, relRetDir);
     commands.insert(commands.begin(),cmd);
 
     // Change back to the starting directory.
-    cmd = "cd ";
+    cmd = cd_cmd;
     cmd += this->ConvertToOutputForExisting(relRetDir, tgtDir);
     commands.push_back(cmd);
     }
@@ -2250,7 +2253,7 @@ void cmLocalUnixMakefileGenerator3
     std::vector<std::string>::iterator i = commands.begin();
     for (; i != commands.end(); ++i)
       {
-      std::string cmd = "cd ";
+      std::string cmd = cd_cmd;
       cmd += this->ConvertToOutputForExisting(tgtDir, relRetDir);
       cmd += " && ";
       cmd += *i;