ENH: name pdb files for visual studio make based builds
This commit is contained in:
parent
f2e2f23392
commit
e6ef33f598
|
@ -14,7 +14,7 @@ ELSE(CMAKE_VERBOSE_MAKEFILE)
|
||||||
ENDIF(CMAKE_VERBOSE_MAKEFILE)
|
ENDIF(CMAKE_VERBOSE_MAKEFILE)
|
||||||
# create a shared C++ library
|
# create a shared C++ library
|
||||||
SET(CMAKE_CXX_CREATE_SHARED_LIBRARY
|
SET(CMAKE_CXX_CREATE_SHARED_LIBRARY
|
||||||
"link ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} /out:<TARGET> /dll <LINK_FLAGS> <OBJECTS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
|
"link ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} /out:<TARGET> /PDB:<TARGET_PDB> /dll <LINK_FLAGS> <OBJECTS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
|
||||||
SET(CMAKE_CXX_CREATE_SHARED_MODULE "${CMAKE_CXX_CREATE_SHARED_LIBRARY}")
|
SET(CMAKE_CXX_CREATE_SHARED_MODULE "${CMAKE_CXX_CREATE_SHARED_LIBRARY}")
|
||||||
|
|
||||||
# create a C shared library
|
# create a C shared library
|
||||||
|
@ -31,18 +31,18 @@ SET(CMAKE_C_CREATE_STATIC_LIBRARY "${CMAKE_CXX_CREATE_STATIC_LIBRARY}")
|
||||||
|
|
||||||
# compile a C++ file into an object file
|
# compile a C++ file into an object file
|
||||||
SET(CMAKE_CXX_COMPILE_OBJECT
|
SET(CMAKE_CXX_COMPILE_OBJECT
|
||||||
"<CMAKE_CXX_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} <FLAGS> /TP /Fo<OBJECT> -c <SOURCE>${CMAKE_END_TEMP_FILE}")
|
"<CMAKE_CXX_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} <FLAGS> /TP /Fo<OBJECT> /Fd<TARGET_PDB> -c <SOURCE>${CMAKE_END_TEMP_FILE}")
|
||||||
|
|
||||||
# compile a C file into an object file
|
# compile a C file into an object file
|
||||||
SET(CMAKE_C_COMPILE_OBJECT
|
SET(CMAKE_C_COMPILE_OBJECT
|
||||||
"<CMAKE_C_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} <FLAGS> /Fo<OBJECT> -c <SOURCE>${CMAKE_END_TEMP_FILE}")
|
"<CMAKE_C_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} <FLAGS> /Fo<OBJECT> /Fd<TARGET_PDB> -c <SOURCE>${CMAKE_END_TEMP_FILE}")
|
||||||
|
|
||||||
|
|
||||||
SET(CMAKE_C_LINK_EXECUTABLE
|
SET(CMAKE_C_LINK_EXECUTABLE
|
||||||
"<CMAKE_C_COMPILER> ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} <FLAGS> <OBJECTS> /Fe<TARGET> -link <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
|
"<CMAKE_C_COMPILER> ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} <FLAGS> <OBJECTS> /Fe<TARGET> /Fd<TARGET_PDB> -link <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
|
||||||
|
|
||||||
SET(CMAKE_CXX_LINK_EXECUTABLE
|
SET(CMAKE_CXX_LINK_EXECUTABLE
|
||||||
"<CMAKE_CXX_COMPILER> ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} <FLAGS> <OBJECTS> /Fe<TARGET> -link <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
|
"<CMAKE_CXX_COMPILER> ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} <FLAGS> <OBJECTS> /Fe<TARGET> /Fd<TARGET_PDB> -link <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
|
||||||
|
|
||||||
SET(CMAKE_CREATE_WIN32_EXE /subsystem:windows)
|
SET(CMAKE_CREATE_WIN32_EXE /subsystem:windows)
|
||||||
SET(CMAKE_CREATE_CONSOLE_EXE /subsystem:console)
|
SET(CMAKE_CREATE_CONSOLE_EXE /subsystem:console)
|
||||||
|
|
|
@ -734,6 +734,14 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
|
||||||
return replaceValues.ObjectsQuoted;
|
return replaceValues.ObjectsQuoted;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(replaceValues.TargetPDB )
|
||||||
|
{
|
||||||
|
if(variable == "TARGET_PDB")
|
||||||
|
{
|
||||||
|
return replaceValues.TargetPDB;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(replaceValues.Target)
|
if(replaceValues.Target)
|
||||||
{
|
{
|
||||||
if(variable == "TARGET_QUOTED")
|
if(variable == "TARGET_QUOTED")
|
||||||
|
|
|
@ -192,6 +192,7 @@ public:
|
||||||
this->TargetInstallNameDir = 0;
|
this->TargetInstallNameDir = 0;
|
||||||
this->LinkFlags= 0;
|
this->LinkFlags= 0;
|
||||||
}
|
}
|
||||||
|
const char* TargetPDB;
|
||||||
const char* Language;
|
const char* Language;
|
||||||
const char* Objects;
|
const char* Objects;
|
||||||
const char* Target;
|
const char* Target;
|
||||||
|
|
|
@ -168,17 +168,22 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
|
||||||
}
|
}
|
||||||
std::string targetFullPath = outpath + targetName;
|
std::string targetFullPath = outpath + targetName;
|
||||||
std::string targetFullPathReal = outpath + targetNameReal;
|
std::string targetFullPathReal = outpath + targetNameReal;
|
||||||
|
std::string targetFullPathPDB = outpath + this->Target->GetName();
|
||||||
|
targetFullPathPDB += ".pdb";
|
||||||
|
std::string targetOutPathPDB =
|
||||||
|
this->Convert(targetFullPathPDB.c_str(),
|
||||||
|
cmLocalGenerator::FULL,
|
||||||
|
cmLocalGenerator::MAKEFILE);
|
||||||
// Convert to the output path to use in constructing commands.
|
// Convert to the output path to use in constructing commands.
|
||||||
std::string targetOutPath =
|
std::string targetOutPath =
|
||||||
this->Convert(targetFullPath.c_str(),
|
this->Convert(targetFullPath.c_str(),
|
||||||
cmLocalGenerator::START_OUTPUT,
|
cmLocalGenerator::START_OUTPUT,
|
||||||
cmLocalGenerator::MAKEFILE);
|
cmLocalGenerator::MAKEFILE);
|
||||||
std::string targetOutPathReal =
|
std::string targetOutPathReal =
|
||||||
this->Convert(targetFullPathReal.c_str(),
|
this->Convert(targetFullPathReal.c_str(),
|
||||||
cmLocalGenerator::START_OUTPUT,
|
cmLocalGenerator::START_OUTPUT,
|
||||||
cmLocalGenerator::MAKEFILE);
|
cmLocalGenerator::MAKEFILE);
|
||||||
|
|
||||||
// Get the language to use for linking this executable.
|
// Get the language to use for linking this executable.
|
||||||
const char* linkLanguage =
|
const char* linkLanguage =
|
||||||
this->Target->GetLinkerLanguage(this->GlobalGenerator);
|
this->Target->GetLinkerLanguage(this->GlobalGenerator);
|
||||||
|
@ -328,6 +333,7 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
|
||||||
vars.Language = linkLanguage;
|
vars.Language = linkLanguage;
|
||||||
vars.Objects = buildObjs.c_str();
|
vars.Objects = buildObjs.c_str();
|
||||||
vars.Target = targetOutPathReal.c_str();
|
vars.Target = targetOutPathReal.c_str();
|
||||||
|
vars.TargetPDB = targetOutPathPDB.c_str();
|
||||||
std::string linkString = linklibs.str();
|
std::string linkString = linklibs.str();
|
||||||
vars.LinkLibraries = linkString.c_str();
|
vars.LinkLibraries = linkString.c_str();
|
||||||
vars.Flags = flags.c_str();
|
vars.Flags = flags.c_str();
|
||||||
|
|
|
@ -233,12 +233,16 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
|
||||||
outpath += "/";
|
outpath += "/";
|
||||||
}
|
}
|
||||||
std::string targetFullPath = outpath + targetName;
|
std::string targetFullPath = outpath + targetName;
|
||||||
|
std::string targetFullPathPDB = outpath + this->Target->GetName() + std::string(".pdb");
|
||||||
std::string targetFullPathSO = outpath + targetNameSO;
|
std::string targetFullPathSO = outpath + targetNameSO;
|
||||||
std::string targetFullPathReal = outpath + targetNameReal;
|
std::string targetFullPathReal = outpath + targetNameReal;
|
||||||
std::string targetFullPathImport = outpath + targetNameImport;
|
std::string targetFullPathImport = outpath + targetNameImport;
|
||||||
|
|
||||||
// Construct the output path version of the names for use in command
|
// Construct the output path version of the names for use in command
|
||||||
// arguments.
|
// arguments.
|
||||||
|
std::string targetOutPathPDB =
|
||||||
|
this->Convert(targetFullPathPDB.c_str(),cmLocalGenerator::FULL,
|
||||||
|
cmLocalGenerator::MAKEFILE);
|
||||||
std::string targetOutPath =
|
std::string targetOutPath =
|
||||||
this->Convert(targetFullPath.c_str(),cmLocalGenerator::START_OUTPUT,
|
this->Convert(targetFullPath.c_str(),cmLocalGenerator::START_OUTPUT,
|
||||||
cmLocalGenerator::MAKEFILE);
|
cmLocalGenerator::MAKEFILE);
|
||||||
|
@ -402,6 +406,7 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
|
||||||
cleanObjs += variableName;
|
cleanObjs += variableName;
|
||||||
cleanObjs += ")";
|
cleanObjs += ")";
|
||||||
cmLocalGenerator::RuleVariables vars;
|
cmLocalGenerator::RuleVariables vars;
|
||||||
|
vars.TargetPDB = targetOutPathPDB.c_str();
|
||||||
vars.Language = linkLanguage;
|
vars.Language = linkLanguage;
|
||||||
vars.Objects = buildObjs.c_str();
|
vars.Objects = buildObjs.c_str();
|
||||||
std::string objdir = "CMakeFiles/";
|
std::string objdir = "CMakeFiles/";
|
||||||
|
|
|
@ -385,8 +385,16 @@ cmMakefileTargetGenerator
|
||||||
std::string compileRule =
|
std::string compileRule =
|
||||||
this->Makefile->GetRequiredDefinition(compileRuleVar.c_str());
|
this->Makefile->GetRequiredDefinition(compileRuleVar.c_str());
|
||||||
cmSystemTools::ExpandListArgument(compileRule, commands);
|
cmSystemTools::ExpandListArgument(compileRule, commands);
|
||||||
|
|
||||||
|
std::string outpath = this->Makefile->GetStartOutputDirectory();
|
||||||
|
outpath += "/";
|
||||||
|
outpath += this->Target->GetName();
|
||||||
|
outpath += ".pdb";
|
||||||
|
outpath = this->Convert(outpath.c_str(), cmLocalGenerator::FULL,
|
||||||
|
cmLocalGenerator::MAKEFILE);
|
||||||
cmLocalGenerator::RuleVariables vars;
|
cmLocalGenerator::RuleVariables vars;
|
||||||
vars.Language = lang;
|
vars.Language = lang;
|
||||||
|
vars.TargetPDB = outpath.c_str();
|
||||||
vars.Source = sourceFile.c_str();
|
vars.Source = sourceFile.c_str();
|
||||||
vars.Object = relativeObj.c_str();
|
vars.Object = relativeObj.c_str();
|
||||||
std::string objdir = this->LocalGenerator->GetHomeRelativeOutputPath();
|
std::string objdir = this->LocalGenerator->GetHomeRelativeOutputPath();
|
||||||
|
|
Loading…
Reference in New Issue