|
|
@@ -74,6 +74,7 @@ struct cmTarget::ImportInfo
|
|
|
//----------------------------------------------------------------------------
|
|
|
struct cmTarget::CompileInfo
|
|
|
{
|
|
|
+ std::string CompilePdbDir;
|
|
|
};
|
|
|
|
|
|
struct TargetConfigPair : public std::pair<cmTarget const* , std::string> {
|
|
|
@@ -275,6 +276,7 @@ void cmTarget::SetMakefile(cmMakefile* mf)
|
|
|
this->SetPropertyDefault("LIBRARY_OUTPUT_DIRECTORY", 0);
|
|
|
this->SetPropertyDefault("RUNTIME_OUTPUT_DIRECTORY", 0);
|
|
|
this->SetPropertyDefault("PDB_OUTPUT_DIRECTORY", 0);
|
|
|
+ this->SetPropertyDefault("COMPILE_PDB_OUTPUT_DIRECTORY", 0);
|
|
|
this->SetPropertyDefault("Fortran_FORMAT", 0);
|
|
|
this->SetPropertyDefault("Fortran_MODULE_DIRECTORY", 0);
|
|
|
this->SetPropertyDefault("GNUtoMS", 0);
|
|
|
@@ -303,6 +305,7 @@ void cmTarget::SetMakefile(cmMakefile* mf)
|
|
|
"LIBRARY_OUTPUT_DIRECTORY_",
|
|
|
"RUNTIME_OUTPUT_DIRECTORY_",
|
|
|
"PDB_OUTPUT_DIRECTORY_",
|
|
|
+ "COMPILE_PDB_OUTPUT_DIRECTORY_",
|
|
|
"MAP_IMPORTED_CONFIG_",
|
|
|
0};
|
|
|
for(std::vector<std::string>::iterator ci = configNames.begin();
|
|
|
@@ -2517,6 +2520,7 @@ cmTarget::CompileInfo const* cmTarget::GetCompileInfo(const char* config) const
|
|
|
if(i == this->Internal->CompileInfoMap.end())
|
|
|
{
|
|
|
CompileInfo info;
|
|
|
+ this->ComputePDBOutputDir("COMPILE_PDB", config, info.CompilePdbDir);
|
|
|
CompileInfoMapType::value_type entry(config_upper, info);
|
|
|
i = this->Internal->CompileInfoMap.insert(entry).first;
|
|
|
}
|
|
|
@@ -2552,6 +2556,16 @@ std::string cmTarget::GetPDBDirectory(const char* config) const
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
+//----------------------------------------------------------------------------
|
|
|
+std::string cmTarget::GetCompilePDBDirectory(const char* config) const
|
|
|
+{
|
|
|
+ if(CompileInfo const* info = this->GetCompileInfo(config))
|
|
|
+ {
|
|
|
+ return info->CompilePdbDir;
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+}
|
|
|
+
|
|
|
//----------------------------------------------------------------------------
|
|
|
const char* cmTarget::GetLocation(const char* config) const
|
|
|
{
|
|
|
@@ -3212,6 +3226,49 @@ std::string cmTarget::GetPDBName(const char* config) const
|
|
|
return prefix+base+".pdb";
|
|
|
}
|
|
|
|
|
|
+//----------------------------------------------------------------------------
|
|
|
+std::string cmTarget::GetCompilePDBName(const char* config) const
|
|
|
+{
|
|
|
+ std::string prefix;
|
|
|
+ std::string base;
|
|
|
+ std::string suffix;
|
|
|
+ this->GetFullNameInternal(config, false, prefix, base, suffix);
|
|
|
+
|
|
|
+ // Check for a per-configuration output directory target property.
|
|
|
+ std::string configUpper = cmSystemTools::UpperCase(config? config : "");
|
|
|
+ std::string configProp = "COMPILE_PDB_NAME_";
|
|
|
+ configProp += configUpper;
|
|
|
+ const char* config_name = this->GetProperty(configProp.c_str());
|
|
|
+ if(config_name && *config_name)
|
|
|
+ {
|
|
|
+ return prefix + config_name + ".pdb";
|
|
|
+ }
|
|
|
+
|
|
|
+ const char* name = this->GetProperty("COMPILE_PDB_NAME");
|
|
|
+ if(name && *name)
|
|
|
+ {
|
|
|
+ return prefix + name + ".pdb";
|
|
|
+ }
|
|
|
+
|
|
|
+ return "";
|
|
|
+}
|
|
|
+
|
|
|
+//----------------------------------------------------------------------------
|
|
|
+std::string cmTarget::GetCompilePDBPath(const char* config) const
|
|
|
+{
|
|
|
+ std::string dir = this->GetCompilePDBDirectory(config);
|
|
|
+ std::string name = this->GetCompilePDBName(config);
|
|
|
+ if(dir.empty() && !name.empty())
|
|
|
+ {
|
|
|
+ dir = this->GetPDBDirectory(config);
|
|
|
+ }
|
|
|
+ if(!dir.empty())
|
|
|
+ {
|
|
|
+ dir += "/";
|
|
|
+ }
|
|
|
+ return dir + name;
|
|
|
+}
|
|
|
+
|
|
|
//----------------------------------------------------------------------------
|
|
|
bool cmTarget::HasSOName(const char* config) const
|
|
|
{
|