Merge topic 'windows-make-working-drive'

42a732b Change working drive only in MinGW Makefiles
b567613 Fix working drive of make rules on Windows
This commit is contained in:
Brad King 2011-04-12 14:44:19 -04:00 committed by CMake Topic Stage
commit f3e48acad0
1 changed files with 9 additions and 3 deletions

View File

@ -2228,17 +2228,23 @@ void cmLocalUnixMakefileGenerator3
return; return;
} }
// In a Windows shell we must change drive letter too. The shell
// used by NMake and Borland make does not support "cd /d" so this
// feature simply cannot work with them (Borland make does not even
// support changing the drive letter with just "d:").
const char* cd_cmd = this->MinGWMake? "cd /d " : "cd ";
if(!this->UnixCD) if(!this->UnixCD)
{ {
// On Windows we must perform each step separately and then change // On Windows we must perform each step separately and then change
// back because the shell keeps the working directory between // back because the shell keeps the working directory between
// commands. // commands.
std::string cmd = "cd "; std::string cmd = cd_cmd;
cmd += this->ConvertToOutputForExisting(tgtDir, relRetDir); cmd += this->ConvertToOutputForExisting(tgtDir, relRetDir);
commands.insert(commands.begin(),cmd); commands.insert(commands.begin(),cmd);
// Change back to the starting directory. // Change back to the starting directory.
cmd = "cd "; cmd = cd_cmd;
cmd += this->ConvertToOutputForExisting(relRetDir, tgtDir); cmd += this->ConvertToOutputForExisting(relRetDir, tgtDir);
commands.push_back(cmd); commands.push_back(cmd);
} }
@ -2250,7 +2256,7 @@ void cmLocalUnixMakefileGenerator3
std::vector<std::string>::iterator i = commands.begin(); std::vector<std::string>::iterator i = commands.begin();
for (; i != commands.end(); ++i) for (; i != commands.end(); ++i)
{ {
std::string cmd = "cd "; std::string cmd = cd_cmd;
cmd += this->ConvertToOutputForExisting(tgtDir, relRetDir); cmd += this->ConvertToOutputForExisting(tgtDir, relRetDir);
cmd += " && "; cmd += " && ";
cmd += *i; cmd += *i;