| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609 |
- /*=========================================================================
- Program: Insight Segmentation & Registration Toolkit
- Module: $RCSfile$
- Language: C++
- Date: $Date$
- Version: $Revision$
- Copyright (c) 2001 Insight Consortium
- All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- * The name of the Insight Consortium, nor the names of any consortium members,
- nor of any contributors, may be used to endorse or promote products derived
- from this software without specific prior written permission.
- * Modified source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS''
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
- ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- =========================================================================*/
- #include "cmNMakeMakefileGenerator.h"
- #include "cmMakefile.h"
- #include "cmStandardIncludes.h"
- #include "cmSystemTools.h"
- #include "cmSourceFile.h"
- #include "cmMakeDepend.h"
- #include "cmCacheManager.h"
- #include "cmGeneratedFileStream.h"
- #include "windows.h"
- cmNMakeMakefileGenerator::cmNMakeMakefileGenerator()
- {
- m_LibraryPathOption = "$(CMAKE_C_LIBPATH_FLAG)";
- this->SetObjectFileExtension("$(CMAKE_OBJECT_FILE_SUFFIX)");
- this->SetExecutableExtension("$(CMAKE_EXECUTABLE_SUFFIX)");
- this->SetLibraryPrefix("");
- this->SetStaticLibraryExtension("$(CMAKE_STATICLIB_SUFFIX)");
- this->SetSharedLibraryExtension("$(CMAKE_SHLIB_SUFFIX)");
- m_QuoteNextCommand = true; // most of the time command should be quoted
- }
- cmNMakeMakefileGenerator::~cmNMakeMakefileGenerator()
- {
- }
- // convert to windows short paths if there are spaces
- // in path
- std::string cmNMakeMakefileGenerator::ShortPath(const char* path)
- {
- std::string ret = path;
- cmSystemTools::ConvertToWindowsSlashes(ret);
- // if there are no spaces in path, then just return path
- if(ret.find(' ') == std::string::npos)
- {
- return ret;
- }
-
- // if there are spaces then call GetShortPathName to get rid of them
- char *buffer = new char[strlen(path)+1];
- if(GetShortPathName(path, buffer,
- strlen(path)+1) != 0)
- {
- ret = buffer;
- }
- else
- {
- // if GetShortPathName failed for some reason use
- // EscapeSpaces instead
- ret = cmSystemTools::EscapeSpaces(path);
- }
- delete [] buffer;
- return ret;
- }
- // convert a command to a short path if it has spaces
- // this separates the arguments from the command and puts
- // them back together
- std::string cmNMakeMakefileGenerator::ShortPathCommand(const char* command)
- {
- if(!strchr(command, ' '))
- {
- return command;
- }
- cmRegularExpression reg("^\"([^\"]*)\"(.*)");
- if(reg.find(command))
- {
- std::string c = reg.match(1);
- cmRegularExpression removeIntDir("(.*)/\\$\\(IntDir\\)(.*)");
- if(removeIntDir.find(c))
- {
- c = removeIntDir.match(1) + removeIntDir.match(2);
- }
- c = ShortPath(c.c_str());
- std::string ret = c;
- std::string args = reg.match(2);
- ret += args;
- return ret;
- }
- return command;
- }
- void cmNMakeMakefileGenerator::ComputeSystemInfo()
- {
- // now load the settings
- if(!m_Makefile->GetDefinition("CMAKE_ROOT"))
- {
- cmSystemTools::Error(
- "CMAKE_ROOT has not been defined, bad GUI or driver program");
- return;
- }
- std::string fpath =
- m_Makefile->GetDefinition("CMAKE_ROOT");
- fpath += "/Templates/CMakeNMakeWindowsSystemConfig.cmake";
- m_Makefile->ReadListFile(NULL,fpath.c_str());
- }
-
- void cmNMakeMakefileGenerator::OutputMakeVariables(std::ostream& fout)
- {
- fout << "# NMake Makefile generated by cmake\n";
- const char* variables =
- "# general varibles used in the makefile\n"
- "\n"
- "# Path to cmake\n"
- "CMAKE_COMMAND = ${CMAKE_COMMAND}\n"
- "CMAKE_STANDARD_WINDOWS_LIBRARIES = @CMAKE_STANDARD_WINDOWS_LIBRARIES@\n"
- "CMAKE_C_COMPILER = @CMAKE_C_COMPILER@\n"
- "CMAKE_C_FLAGS = @CMAKE_C_FLAGS@ @BUILD_FLAGS@\n"
- "CMAKE_C_OUTPUT_OBJECT_FILE_FLAG = @CMAKE_C_OUTPUT_OBJECT_FILE_FLAG@\n"
- "CMAKE_C_OUTPUT_EXECUTABLE_FILE_FLAG = @CMAKE_C_OUTPUT_EXECUTABLE_FILE_FLAG@\n"
- "CMAKE_LINKER = @CMAKE_LINKER@\n"
- "CMAKE_C_LINK_EXECUTABLE_FLAG = @CMAKE_C_LINK_EXECUTABLE_FLAG@\n"
- "CMAKE_C_LIBPATH_FLAG = @CMAKE_C_LIBPATH_FLAG@\n"
- "CMAKE_LINKER_FLAGS = @CMAKE_LINKER_FLAGS@ @LINKER_BUILD_FLAGS@\n"
- "CMAKE_LINKER_SHARED_LIBRARY_FLAG = @CMAKE_LINKER_SHARED_LIBRARY_FLAG@\n"
- "CMAKE_LINKER_STATIC_LIBRARY_FLAG = @CMAKE_LINKER_STATIC_LIBRARY_FLAG@\n"
- "CMAKE_LINKER_OUTPUT_FILE_FLAG = @CMAKE_LINKER_OUTPUT_FILE_FLAG@\n"
- "CMAKE_CXXFLAGS = @CMAKE_CXX_FLAGS@ @BUILD_FLAGS@\n"
- "CMAKE_CXX_COMPILER = @CMAKE_CXX_COMPILER@\n"
- "CMAKE_OBJECT_FILE_SUFFIX = @CMAKE_OBJECT_FILE_SUFFIX@\n"
- "CMAKE_EXECUTABLE_SUFFIX = @CMAKE_EXECUTABLE_SUFFIX@\n"
- "CMAKE_STATICLIB_SUFFIX = @CMAKE_STATICLIB_SUFFIX@\n"
- "CMAKE_SHLIB_SUFFIX = @CMAKE_SHLIB_SUFFIX@\n";
- std::string buildType = "CMAKE_CXX_FLAGS_";
- buildType += m_Makefile->GetDefinition("CMAKE_BUILD_TYPE");
- buildType = cmSystemTools::UpperCase(buildType);
- m_Makefile->AddDefinition("BUILD_FLAGS",
- m_Makefile->GetDefinition(
- buildType.c_str()));
- buildType = "CMAKE_LINKER_FLAGS_";
- buildType += m_Makefile->GetDefinition("CMAKE_BUILD_TYPE");
- buildType = cmSystemTools::UpperCase(buildType);
- m_Makefile->AddDefinition("LINKER_BUILD_FLAGS",
- m_Makefile->GetDefinition(
- buildType.c_str()));
- std::string replaceVars = variables;
- m_Makefile->ExpandVariablesInString(replaceVars);
- fout << replaceVars.c_str();
- fout << "CMAKE_CURRENT_SOURCE = "
- << ShortPath(m_Makefile->GetStartDirectory() )
- << "\n";
- fout << "CMAKE_CURRENT_BINARY = "
- << ShortPath(m_Makefile->GetStartOutputDirectory())
- << "\n";
- fout << "CMAKE_SOURCE_DIR = "
- << ShortPath(m_Makefile->GetHomeDirectory()) << "\n";
- fout << "CMAKE_BINARY_DIR = "
- << ShortPath(m_Makefile->GetHomeOutputDirectory() )
- << "\n";
- // Output Include paths
- fout << "INCLUDE_FLAGS = ";
- std::vector<std::string>& includes = m_Makefile->GetIncludeDirectories();
- std::vector<std::string>::iterator i;
- fout << "-I" << cmSystemTools::EscapeSpaces(m_Makefile->GetStartDirectory()) << " ";
- for(i = includes.begin(); i != includes.end(); ++i)
- {
- std::string include = *i;
- // Don't output a -I for the standard include path "/usr/include".
- // This can cause problems with certain standard library
- // implementations because the wrong headers may be found first.
- if(include != "/usr/include")
- {
- fout << "-I" << cmSystemTools::EscapeSpaces(i->c_str()).c_str() << " ";
- }
- }
- fout << m_Makefile->GetDefineFlags();
- fout << "\n\n";
- }
- void cmNMakeMakefileGenerator::BuildInSubDirectory(std::ostream& fout,
- const char* directory,
- const char* target1,
- const char* target2)
- {
- if(target1)
- {
- std::string dir = directory;
- cmSystemTools::ConvertToWindowsSlashes(dir);
- fout << "\tif not exist " << cmSystemTools::EscapeSpaces(dir.c_str())
- << " "
- << "$(MAKE) rebuild_cache\n"
- << "\tcd .\\" << directory << "\n"
- << "\t$(MAKE) -$(MAKEFLAGS) " << target1 << "\n";
- }
- if(target2)
- {
- fout << "\t$(MAKE) -$(MAKEFLAGS) " << target2 << "\n";
- }
- std::string currentDir = m_Makefile->GetCurrentOutputDirectory();
- cmSystemTools::ConvertToWindowsSlashes(currentDir);
- fout << "\tcd " << cmSystemTools::EscapeSpaces(currentDir.c_str()) << "\n";
- }
- // This needs to be overriden because nmake requires commands to be quoted
- // if the are full paths to the executable????
- void cmNMakeMakefileGenerator::OutputMakeRule(std::ostream& fout,
- const char* comment,
- const char* target,
- const char* depends,
- const char* command,
- const char* command2,
- const char* command3,
- const char* command4)
- {
- if(!target)
- {
- cmSystemTools::Error("no target for OutputMakeRule");
- return;
- }
-
- std::string replace;
- if(comment)
- {
- replace = comment;
- m_Makefile->ExpandVariablesInString(replace);
- fout << "#---------------------------------------------------------\n";
- fout << "# " << comment;
- fout << "\n#\n";
- }
- fout << "\n";
- replace = target;
- m_Makefile->ExpandVariablesInString(replace);
- replace = cmSystemTools::EscapeSpaces(replace.c_str());
- fout << replace.c_str() << ": ";
- if(depends)
- {
- replace = depends;
- m_Makefile->ExpandVariablesInString(replace);
- fout << replace.c_str();
- }
- fout << "\n";
- const char* startCommand = "\t\"";
- const char* endCommand = "\"\n";
- if(!m_QuoteNextCommand)
- {
- startCommand = "\t";
- endCommand = "\n";
- }
- if(command)
- {
- replace = ShortPathCommand(command);
- m_Makefile->ExpandVariablesInString(replace);
- fout << startCommand << replace.c_str() << endCommand;
- }
- if(command2)
- {
- replace = ShortPathCommand(command2);
- m_Makefile->ExpandVariablesInString(replace);
- fout << startCommand << replace.c_str() << endCommand;
- }
- if(command3)
- {
- replace = ShortPathCommand(command3);
- m_Makefile->ExpandVariablesInString(replace);
- fout << startCommand << replace.c_str() << endCommand;
- }
- if(command4)
- {
- replace = ShortPathCommand(command4);
- m_Makefile->ExpandVariablesInString(replace);
- 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
- cmNMakeMakefileGenerator::
- OutputBuildObjectFromSource(std::ostream& fout,
- const char* shortName,
- const cmSourceFile& source,
- const char* extraCompileFlags,
- bool shared)
- {
- std::string comment = "Build ";
- std::string objectFile = std::string(shortName) +
- this->GetOutputExtension(source.GetSourceExtension().c_str());
-
- comment += objectFile + " From ";
- comment += source.GetFullPath();
- std::string compileCommand;
- std::string ext = source.GetSourceExtension();
- if(ext == "c" )
- {
- compileCommand = "$(CMAKE_C_COMPILER) $(CMAKE_C_FLAGS) ";
- compileCommand += extraCompileFlags;
- if(shared)
- {
- compileCommand += "$(CMAKE_SHLIB_CFLAGS) ";
- }
- compileCommand += "$(INCLUDE_FLAGS) -c ";
- compileCommand +=
- cmSystemTools::EscapeSpaces(source.GetFullPath().c_str());
- compileCommand += " $(CMAKE_C_OUTPUT_OBJECT_FILE_FLAG)";
- compileCommand += objectFile;
- }
- else if (ext == "rc")
- {
- compileCommand = "$(RC) /fo\"";
- compileCommand += objectFile;
- compileCommand += "\" ";
- compileCommand +=
- cmSystemTools::EscapeSpaces(source.GetFullPath().c_str());
- }
- else if (ext == "def")
- {
- // no rule to output for this one
- return;
- }
- // assume c++ if not c rc or def
- else
- {
- compileCommand = "$(CMAKE_CXX_COMPILER) $(CMAKE_CXXFLAGS) ";
- compileCommand += extraCompileFlags;
- if(shared)
- {
- compileCommand += "$(CMAKE_SHLIB_CFLAGS) ";
- }
- compileCommand += "$(INCLUDE_FLAGS) -c ";
- compileCommand +=
- cmSystemTools::EscapeSpaces(source.GetFullPath().c_str());
- compileCommand += " $(CMAKE_C_OUTPUT_OBJECT_FILE_FLAG)";
- compileCommand += objectFile;
- }
- m_QuoteNextCommand = false;
- this->OutputMakeRule(fout,
- comment.c_str(),
- objectFile.c_str(),
- cmSystemTools::EscapeSpaces(
- source.GetFullPath().c_str()).c_str(),
- compileCommand.c_str());
- }
- void cmNMakeMakefileGenerator::OutputSharedLibraryRule(std::ostream& fout,
- const char* name,
- const cmTarget &t)
- {
- std::string target = m_LibraryOutputPath + name + m_SharedLibraryExtension;
- std::string depend = "$(";
- depend += name;
- depend += "_SRC_OBJS) $(" + std::string(name) + "_DEPEND_LIBS)";
- std::string command = "$(CMAKE_LINKER) $(CMAKE_LINKER_SHARED_LIBRARY_FLAG) $(CMAKE_LINKER_FLAGS) @<<\n\t";
- command += " $(" + std::string(name) + "_SRC_OBJS) $(CMAKE_LINKER_OUTPUT_FILE_FLAG)";
- std::string dllpath = m_LibraryOutputPath + std::string(name) + m_SharedLibraryExtension;
- command += cmSystemTools::EscapeSpaces(dllpath.c_str());
- command += " ";
- std::strstream linklibs;
- this->OutputLinkLibraries(linklibs, name, t);
- linklibs << std::ends;
- command += linklibs.str();
- delete [] linklibs.str();
- const std::vector<cmSourceFile>& sources = t.GetSourceFiles();
- for(std::vector<cmSourceFile>::const_iterator i = sources.begin();
- i != sources.end(); ++i)
- {
- if(i->GetSourceExtension() == "def")
- {
- command += "/DEF:";
- command += i->GetFullPath();
- }
- }
- command += "\n<<\n";
- m_QuoteNextCommand = false;
- this->OutputMakeRule(fout, "rules for a shared library",
- target.c_str(),
- depend.c_str(),
- command.c_str());
- }
- void cmNMakeMakefileGenerator::OutputModuleLibraryRule(std::ostream& fout,
- const char* name,
- const cmTarget &target)
- {
- this->OutputSharedLibraryRule(fout, name, target);
- }
- void cmNMakeMakefileGenerator::OutputStaticLibraryRule(std::ostream& fout,
- const char* name,
- const cmTarget &)
- {
- std::string target = m_LibraryOutputPath + std::string(name) + m_StaticLibraryExtension;
- std::string depend = "$(";
- depend += std::string(name) + "_SRC_OBJS)";
- std::string command = "$(CMAKE_LINKER) $(CMAKE_LINKER_STATIC_LIBRARY_FLAG) $(CMAKE_LINKER_FLAGS) @<<\n\t $(CMAKE_LINKER_OUTPUT_FILE_FLAG)";
- std::string libpath = m_LibraryOutputPath + std::string(name) + m_StaticLibraryExtension;
- command += cmSystemTools::EscapeSpaces(libpath.c_str());
- command += " $(";
- command += std::string(name) + "_SRC_OBJS)";
- command += "\n<<\n";
- std::string comment = "rule to build static library: ";
- comment += name;
- m_QuoteNextCommand = false;
- this->OutputMakeRule(fout,
- comment.c_str(),
- target.c_str(),
- depend.c_str(),
- command.c_str());
- }
- void cmNMakeMakefileGenerator::OutputExecutableRule(std::ostream& fout,
- const char* name,
- const cmTarget &t)
- {
- std::string target = m_ExecutableOutputPath + name;
- target += m_ExecutableExtension;
- std::string depend = "$(";
- depend += std::string(name) + "_SRC_OBJS) $(" + std::string(name) + "_DEPEND_LIBS)";
- std::string command =
- "$(CMAKE_CXX_COMPILER) $(CMAKE_CXXFLAGS) ";
- command += "$(" + std::string(name) + "_SRC_OBJS) ";
- std::string path = m_ExecutableOutputPath + name + m_ExecutableExtension;
- command += " $(CMAKE_C_OUTPUT_EXECUTABLE_FILE_FLAG)" +
- cmSystemTools::EscapeSpaces(path.c_str());
- command += " $(CMAKE_C_LINK_EXECUTABLE_FLAG) ";
- if(t.GetType() == cmTarget::WIN32_EXECUTABLE)
- {
- command += " /subsystem:windows ";
- }
-
- std::strstream linklibs;
- this->OutputLinkLibraries(linklibs, 0, t);
- linklibs << std::ends;
- command += linklibs.str();
- std::string comment = "rule to build executable: ";
- comment += name;
- m_QuoteNextCommand = false;
- this->OutputMakeRule(fout,
- comment.c_str(),
- target.c_str(),
- depend.c_str(),
- command.c_str());
- }
-
- void cmNMakeMakefileGenerator::OutputLinkLibraries(std::ostream& fout,
- const char* targetLibrary,
- const cmTarget &tgt)
- {
- // Try to emit each search path once
- std::set<std::string> emitted;
- // Embed runtime search paths if possible and if required.
- // collect all the flags needed for linking libraries
- std::string linkLibs;
- std::vector<std::string>& libdirs = m_Makefile->GetLinkDirectories();
- for(std::vector<std::string>::iterator libDir = libdirs.begin();
- libDir != libdirs.end(); ++libDir)
- {
- std::string libpath = ShortPath(libDir->c_str());
- if(emitted.insert(libpath).second)
- {
- linkLibs += m_LibraryPathOption;
- cmSystemTools::ConvertToWindowsSlashes(libpath);
- linkLibs += libpath;
- linkLibs += " ";
- }
- }
- std::string librariesLinked;
- const cmTarget::LinkLibraries& libs = tgt.GetLinkLibraries();
- for(cmTarget::LinkLibraries::const_iterator lib = libs.begin();
- lib != libs.end(); ++lib)
- {
- // Don't link the library against itself!
- if(targetLibrary && (lib->first == targetLibrary)) continue;
- // ** should fix this later, it should check to see if this is
- // a debug build and add the library
- // don't look at debug libraries
- // if (lib->second == cmTarget::DEBUG) continue;
- // skip zero size library entries, this may happen
- // if a variable expands to nothing.
- if (lib->first.size() == 0) continue;
- if(emitted.insert(lib->first).second)
- {
- std::string regexp = ".*\\";
- regexp += m_Makefile->GetDefinition("CMAKE_STATICLIB_SUFFIX");
- regexp += "$";
- cmRegularExpression reg(regexp.c_str());
- // if it ends in .lib, then it is a full path and should
- // be escaped, and does not need .lib added
- if(reg.find(lib->first))
- {
- librariesLinked += ShortPath(lib->first.c_str());
- librariesLinked += " ";
- }
- else
- {
- librariesLinked += m_LibraryLinkOption;
- librariesLinked += lib->first;
- librariesLinked += m_StaticLibraryExtension + " ";
- }
- }
- }
- linkLibs += librariesLinked;
- fout << linkLibs;
- fout << "$(CMAKE_STANDARD_WINDOWS_LIBRARIES) ";
- }
- std::string cmNMakeMakefileGenerator::GetOutputExtension(const char* s)
- {
- std::string sourceExtension = s;
- if(sourceExtension == "def")
- {
- return "";
- }
- if(sourceExtension == "ico" || sourceExtension == "rc2")
- {
- return "";
- }
- if(sourceExtension == "rc")
- {
- return ".res";
- }
- return m_ObjectFileExtension;
- }
- void cmNMakeMakefileGenerator::OutputIncludeMakefile(std::ostream& fout,
- const char* file)
- {
- fout << "!include " << file << "\n";
- }
- bool cmNMakeMakefileGenerator::SamePath(const char* path1, const char* path2)
- {
- // first check to see if they are the same anyway
- if (strcmp(path1, path2) == 0)
- {
- return true;
- }
- // next short path and lower case both of them for the compare
- return
- cmSystemTools::LowerCase(ShortPath(path1)) ==
- cmSystemTools::LowerCase(ShortPath(path2));
- }
- void cmNMakeMakefileGenerator::OutputBuildLibraryInDir(std::ostream& fout,
- const char* path,
- const char* ,
- const char* fullpath)
- {
- std::string currentDir = m_Makefile->GetCurrentOutputDirectory();
- cmSystemTools::ConvertToWindowsSlashes(currentDir);
- fout << cmSystemTools::EscapeSpaces(fullpath)
- << ":\n\tcd " << cmSystemTools::EscapeSpaces(path)
- << "\n\t$(MAKE) " << cmSystemTools::EscapeSpaces(fullpath)
- << "\n\tcd " <<
- cmSystemTools::EscapeSpaces(currentDir.c_str()) << "\n";
- }
|