diff options
Diffstat (limited to 'Source/cmNMakeMakefileGenerator.cxx')
-rw-r--r-- | Source/cmNMakeMakefileGenerator.cxx | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/Source/cmNMakeMakefileGenerator.cxx b/Source/cmNMakeMakefileGenerator.cxx index 6280fb7..0964326 100644 --- a/Source/cmNMakeMakefileGenerator.cxx +++ b/Source/cmNMakeMakefileGenerator.cxx @@ -54,6 +54,7 @@ cmNMakeMakefileGenerator::cmNMakeMakefileGenerator() this->SetLibraryPrefix(""); this->SetSharedLibraryExtension(".dll"); this->SetStaticLibraryExtension(".lib"); + m_QuoteNextCommand = true; // most of the time command should be quoted } cmNMakeMakefileGenerator::~cmNMakeMakefileGenerator() @@ -186,31 +187,43 @@ void cmNMakeMakefileGenerator::OutputMakeRule(std::ostream& fout, fout << replace.c_str(); } fout << "\n"; + const char* startCommand = "\t\""; + const char* endCommand = "\"\n"; + if(!m_QuoteNextCommand) + { + startCommand = "\t"; + endCommand = "\n"; + } if(command) { replace = command; m_Makefile->ExpandVariablesInString(replace); - fout << "\t\"" << replace.c_str() << "\"\n"; + fout << startCommand << replace.c_str() << endCommand; } if(command2) { replace = command2; m_Makefile->ExpandVariablesInString(replace); - fout << "\t\"" << replace.c_str() << "\"\n"; + fout << startCommand << replace.c_str() << endCommand; } if(command3) { replace = command3; m_Makefile->ExpandVariablesInString(replace); - fout << "\t\"" << replace.c_str() << "\"\n"; + fout << startCommand << replace.c_str() << endCommand; } if(command4) { replace = command4; m_Makefile->ExpandVariablesInString(replace); - fout << "\t\"" << replace.c_str() << "\"\n"; + fout << startCommand << replace.c_str() << endCommand; } fout << "\n"; + // reset m_QuoteNextCommand, as the default should be to quote the + // commands. We need the quotes when the command has a full path + // to an executable. However, the quotes break things like the + // linker command. + m_QuoteNextCommand = true; } void @@ -262,6 +275,7 @@ OutputBuildObjectFromSource(std::ostream& fout, compileCommand += " /Fo"; compileCommand += objectFile; } + m_QuoteNextCommand = false; this->OutputMakeRule(fout, comment.c_str(), objectFile.c_str(), @@ -285,6 +299,7 @@ void cmNMakeMakefileGenerator::OutputSharedLibraryRule(std::ostream& fout, linklibs << std::ends; command += linklibs.str(); delete [] linklibs.str(); + m_QuoteNextCommand = false; this->OutputMakeRule(fout, "rules for a shared library", target.c_str(), depend.c_str(), @@ -312,6 +327,7 @@ void cmNMakeMakefileGenerator::OutputStaticLibraryRule(std::ostream& fout, command += std::string(name) + "_SRC_OBJS)"; std::string comment = "rule to build static library: "; comment += name; + m_QuoteNextCommand = false; this->OutputMakeRule(fout, comment.c_str(), target.c_str(), @@ -338,6 +354,7 @@ void cmNMakeMakefileGenerator::OutputExecutableRule(std::ostream& fout, command += linklibs.str(); std::string comment = "rule to build executable: "; comment += name; + m_QuoteNextCommand = false; this->OutputMakeRule(fout, comment.c_str(), target.c_str(), |