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.
This commit is contained in:
Brad King 2011-04-08 09:28:59 -04:00
parent a961ecdad0
commit b5676134ce
1 changed files with 6 additions and 3 deletions

View File

@ -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;