Closer to nmake build
This commit is contained in:
parent
a8d47b7221
commit
94f82edd07
|
@ -438,6 +438,18 @@ std::string cmSystemTools::LowerCase(const std::string& s)
|
|||
return n;
|
||||
}
|
||||
|
||||
// Return a lower case string
|
||||
std::string cmSystemTools::UpperCase(const std::string& s)
|
||||
{
|
||||
std::string n;
|
||||
n.resize(s.size());
|
||||
for (size_t i = 0; i < s.size(); i++)
|
||||
{
|
||||
n[i] = toupper(s[i]);
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
// convert windows slashes to unix slashes \ with /
|
||||
const char *cmSystemTools::ConvertToUnixSlashes(std::string& path)
|
||||
|
|
|
@ -100,6 +100,11 @@ public:
|
|||
*/
|
||||
static std::string LowerCase(const std::string&);
|
||||
|
||||
/**
|
||||
* Return a lower case string
|
||||
*/
|
||||
static std::string UpperCase(const std::string&);
|
||||
|
||||
/**
|
||||
* Replace Windows file system slashes with Unix-style slashes.
|
||||
*/
|
||||
|
|
|
@ -291,17 +291,20 @@ void cmUnixMakefileGenerator::OutputTargetRules(std::ostream& fout)
|
|||
{
|
||||
if(l->second.GetType() == cmTarget::STATIC_LIBRARY)
|
||||
{
|
||||
fout << " \\\n" << m_LibraryOutputPath << "lib" << l->first.c_str()
|
||||
<< ".a";
|
||||
fout << " \\\n" << m_LibraryOutputPath << m_LibraryPrefix
|
||||
<< l->first.c_str()
|
||||
<< m_StaticLibraryExtension;
|
||||
}
|
||||
else if(l->second.GetType() == cmTarget::SHARED_LIBRARY)
|
||||
{
|
||||
fout << " \\\n" << m_LibraryOutputPath << "lib" << l->first.c_str()
|
||||
fout << " \\\n" << m_LibraryOutputPath << m_LibraryPrefix
|
||||
<< l->first.c_str()
|
||||
<< m_Makefile->GetDefinition("CMAKE_SHLIB_SUFFIX");
|
||||
}
|
||||
else if(l->second.GetType() == cmTarget::MODULE_LIBRARY)
|
||||
{
|
||||
fout << " \\\n" << m_LibraryOutputPath << "lib" << l->first.c_str()
|
||||
fout << " \\\n" << m_LibraryOutputPath << m_LibraryPrefix
|
||||
<< l->first.c_str()
|
||||
<< m_Makefile->GetDefinition("CMAKE_MODULE_SUFFIX");
|
||||
}
|
||||
}
|
||||
|
@ -792,18 +795,19 @@ void cmUnixMakefileGenerator::OutputLibDepend(std::ostream& fout,
|
|||
if(m_LibraryOutputPath.size())
|
||||
{
|
||||
libpath = m_LibraryOutputPath;
|
||||
libpath += "lib";
|
||||
libpath += m_LibraryPrefix;
|
||||
}
|
||||
else
|
||||
{
|
||||
libpath += "/lib";
|
||||
libpath += "/";
|
||||
libpath += m_LibraryPrefix;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// library is in current Makefile so use lib as a prefix
|
||||
libpath = m_LibraryOutputPath;
|
||||
libpath += "lib";
|
||||
libpath += m_LibraryPrefix;
|
||||
}
|
||||
// add the library name
|
||||
libpath += name;
|
||||
|
@ -821,7 +825,7 @@ void cmUnixMakefileGenerator::OutputLibDepend(std::ostream& fout,
|
|||
}
|
||||
else
|
||||
{
|
||||
libpath += ".a";
|
||||
libpath += m_StaticLibraryExtension;
|
||||
}
|
||||
fout << libpath << " ";
|
||||
}
|
||||
|
@ -1043,16 +1047,22 @@ void cmUnixMakefileGenerator::OutputCustomRules(std::ostream& fout)
|
|||
// with no outputs
|
||||
if(commandFiles.m_Outputs.size() == 0)
|
||||
{
|
||||
fout << source.c_str() << ": ";
|
||||
// Write out all the dependencies for this rule.
|
||||
for(std::set<std::string>::const_iterator d =
|
||||
commandFiles.m_Depends.begin();
|
||||
d != commandFiles.m_Depends.end(); ++d)
|
||||
{
|
||||
std::string dep = cmSystemTools::EscapeSpaces(d->c_str());
|
||||
fout << " " << dep.c_str();
|
||||
}
|
||||
fout << "\n\t" << command.c_str() << "\n\n";
|
||||
std::string depends;
|
||||
// collect out all the dependencies for this rule.
|
||||
for(std::set<std::string>::const_iterator d =
|
||||
commandFiles.m_Depends.begin();
|
||||
d != commandFiles.m_Depends.end(); ++d)
|
||||
{
|
||||
std::string dep = cmSystemTools::EscapeSpaces(d->c_str());
|
||||
depends += " ";
|
||||
depends += dep;
|
||||
}
|
||||
// output rule
|
||||
this->OutputMakeRule(fout,
|
||||
"Custom command",
|
||||
source.c_str(),
|
||||
depends.c_str(),
|
||||
command.c_str());
|
||||
}
|
||||
// Write a rule for every output generated by this command.
|
||||
for(std::set<std::string>::const_iterator output =
|
||||
|
@ -1060,16 +1070,23 @@ void cmUnixMakefileGenerator::OutputCustomRules(std::ostream& fout)
|
|||
output != commandFiles.m_Outputs.end(); ++output)
|
||||
{
|
||||
std::string src = cmSystemTools::EscapeSpaces(source.c_str());
|
||||
fout << output->c_str() << ": " << src.c_str();
|
||||
// Write out all the dependencies for this rule.
|
||||
std::string depends;
|
||||
depends += src;
|
||||
// Collect out all the dependencies for this rule.
|
||||
for(std::set<std::string>::const_iterator d =
|
||||
commandFiles.m_Depends.begin();
|
||||
d != commandFiles.m_Depends.end(); ++d)
|
||||
{
|
||||
std::string dep = cmSystemTools::EscapeSpaces(d->c_str());
|
||||
fout << " " << dep.c_str();
|
||||
}
|
||||
fout << "\n\t" << command.c_str() << "\n\n";
|
||||
depends += " ";
|
||||
depends += dep;
|
||||
}
|
||||
// output rule
|
||||
this->OutputMakeRule(fout,
|
||||
"Custom command",
|
||||
output->c_str(),
|
||||
depends.c_str(),
|
||||
command.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1510,6 +1527,7 @@ void cmUnixMakefileGenerator::OutputSourceObjectBuildRules(std::ostream& fout)
|
|||
sourceName = source->GetFullPath();
|
||||
shortName = cmSystemTools::GetFilenameName(source->GetSourceName());
|
||||
}
|
||||
shortName += source->GetSourceExtension();
|
||||
// Only output a rule for each .o once.
|
||||
if(rules.find(shortName) == rules.end())
|
||||
{
|
||||
|
|
|
@ -156,11 +156,12 @@ protected:
|
|||
void SetStaticLibraryExtension(const char* e) {m_StaticLibraryExtension = e;}
|
||||
void SetSharedLibraryExtension(const char* e) {m_SharedLibraryExtension = e;}
|
||||
void SetLibraryPrefix(const char* e) { m_LibraryPrefix = e;}
|
||||
protected:
|
||||
std::string m_ExecutableOutputPath;
|
||||
std::string m_LibraryOutputPath;
|
||||
private:
|
||||
bool m_CacheOnly;
|
||||
bool m_Recurse;
|
||||
std::string m_ExecutableOutputPath;
|
||||
std::string m_LibraryOutputPath;
|
||||
std::string m_ObjectFileExtension;
|
||||
std::string m_ExecutableExtension;
|
||||
std::string m_StaticLibraryExtension;
|
||||
|
|
|
@ -45,6 +45,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
#include "cmMSProjectGenerator.h"
|
||||
#include "cmBorlandMakefileGenerator.h"
|
||||
#include "cmNMakeMakefileGenerator.h"
|
||||
#else
|
||||
#include "cmUnixMakefileGenerator.h"
|
||||
#endif
|
||||
|
@ -54,6 +55,7 @@ cmake::cmake()
|
|||
m_Verbose = false;
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
cmMakefileGenerator::RegisterGenerator(new cmMSProjectGenerator);
|
||||
// cmMakefileGenerator::RegisterGenerator(new cmNMakeMakefileGenerator);
|
||||
cmMakefileGenerator::RegisterGenerator(new cmBorlandMakefileGenerator);
|
||||
#else
|
||||
cmMakefileGenerator::RegisterGenerator(new cmUnixMakefileGenerator);
|
||||
|
@ -72,7 +74,7 @@ void cmake::Usage(const char* program)
|
|||
for(std::vector<std::string>::iterator i =names.begin();
|
||||
i != names.end(); ++i)
|
||||
{
|
||||
std::cerr << i->c_str() << " ";
|
||||
std::cerr << "\"" << i->c_str() << "\" ";
|
||||
}
|
||||
std::cerr << ")\n";
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@ int main (int argc, char *argv[])
|
|||
cmSystemTools::ChangeDirectory(binaryDirectory);
|
||||
cmake cm;
|
||||
std::vector<std::string> args;
|
||||
// make sure the same generator is used
|
||||
// use this program as the cmake to be run, it should not
|
||||
// be run that way but the cmake object requires a vailid path
|
||||
std::string cmakeCommand = CMAKE_COMMAND;
|
||||
|
@ -53,6 +54,10 @@ int main (int argc, char *argv[])
|
|||
}
|
||||
args.push_back(cmakeCommand.c_str());
|
||||
args.push_back(sourceDirectory);
|
||||
std::string generator = "-G";
|
||||
generator += CMAKE_GENERATOR;
|
||||
args.push_back(generator);
|
||||
|
||||
if (cm.Generate(args) != 0)
|
||||
{
|
||||
std::cerr << "Error: cmake execution failed\n";
|
||||
|
@ -63,26 +68,33 @@ int main (int argc, char *argv[])
|
|||
cmListFileCache::GetInstance()->ClearCache();
|
||||
// now build the test
|
||||
std::string makeCommand = MAKEPROGRAM;
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__BORLANDC__)
|
||||
// if there are spaces in the makeCommand, assume a full path
|
||||
// and convert it to a path with no spaces in it as the
|
||||
// RunCommand does not like spaces
|
||||
if(makeCommand.find(' ') != std::string::npos)
|
||||
std::string lowerCaseCommand = makeCommand;
|
||||
cmSystemTools::LowerCase(lowerCaseCommand);
|
||||
// if msdev is the make program then do the following
|
||||
if(lowerCaseCommand.find("msdev") != std::string::npos)
|
||||
{
|
||||
char *buffer = new char[makeCommand.size()+1];
|
||||
if(GetShortPathName(makeCommand.c_str(), buffer,
|
||||
makeCommand.size()+1) != 0)
|
||||
// if there are spaces in the makeCommand, assume a full path
|
||||
// and convert it to a path with no spaces in it as the
|
||||
// RunCommand does not like spaces
|
||||
if(makeCommand.find(' ') != std::string::npos)
|
||||
{
|
||||
makeCommand = buffer;
|
||||
delete [] buffer;
|
||||
char *buffer = new char[makeCommand.size()+1];
|
||||
if(GetShortPathName(makeCommand.c_str(), buffer,
|
||||
makeCommand.size()+1) != 0)
|
||||
{
|
||||
makeCommand = buffer;
|
||||
delete [] buffer;
|
||||
}
|
||||
}
|
||||
makeCommand += " ";
|
||||
makeCommand += executableName;
|
||||
makeCommand += ".dsw /MAKE \"ALL_BUILD - Debug\" /REBUILD";
|
||||
}
|
||||
else
|
||||
{
|
||||
// assume a make sytle program
|
||||
makeCommand += " all";
|
||||
}
|
||||
makeCommand += " ";
|
||||
makeCommand += executableName;
|
||||
makeCommand += ".dsw /MAKE \"ALL_BUILD - Debug\" /REBUILD";
|
||||
#else
|
||||
makeCommand += " all";
|
||||
#endif
|
||||
if (!cmSystemTools::RunCommand(makeCommand.c_str(), output))
|
||||
{
|
||||
std::cerr << "Error: " << makeCommand.c_str() << " execution failed\n";
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
#define CMAKE_COMMAND "${CMAKE_COMMAND}"
|
||||
#define MAKEPROGRAM "${MAKEPROGRAM}"
|
||||
|
||||
#define CMAKE_GENERATOR "${CMAKE_GENERATOR}"
|
||||
|
|
|
@ -6,8 +6,10 @@ SET (CMAKE_CXX_COMPILER cl CACHE FILEPATH
|
|||
"Name of C++ compiler used.")
|
||||
SET (CMAKE_C_COMPILER cl CACHE FILEPATH
|
||||
"Name of C compiler used.")
|
||||
SET (CMAKE_CFLAGS cl CACHE FILEPATH
|
||||
SET (CMAKE_CFLAGS "/W3 /Zm1000" CACHE STRING
|
||||
"Flags for C compiler.")
|
||||
SET (CMAKE_BUILD_TYPE Debug CACHE STRING
|
||||
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel")
|
||||
SET (CMAKE_CXX_FLAGS_RELEASE "/MD /O2" CACHE STRING
|
||||
"Flags used by the compiler during release builds (/MD /Ob1 /Oi /Ot /Oy /Gs will produce slightly less optimized but smaller files)")
|
||||
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MD /Zi /O2" CACHE STRING
|
||||
|
@ -19,3 +21,9 @@ SET (CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Od /GZ" CACHE STRING
|
|||
SET (CMAKE_CXX_FLAGS "/W3 /Zm1000 /GX /GR" CACHE STRING
|
||||
"Flags used by the compiler during all build types, /GX /GR are for exceptions and rtti in VC++, /Zm1000 increases the compiler's memory allocation to support ANSI C++/stdlib")
|
||||
SET (CMAKE_USE_WIN32_THREADS 1 CACHE BOOL "Use the win32 thread library")
|
||||
SET (CMAKE_STANDARD_WINDOWS_LIBRARIES "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib" CACHE STRING "Libraries linked by defalut with all applications")
|
||||
SET (CMAKE_SHLIB_SUFFIX ".dll" CACHE STRING "Shared library suffix")
|
||||
SET (CMAKE_MODULE_SUFFIX ".dll" CACHE STRING "Module library suffix")
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue