浏览代码

BUG: Use the exe/lib output path for .pdb file location. This addresses bug#3277 and bug#4287.

Brad King 19 年之前
父节点
当前提交
23d8525d46
共有 1 个文件被更改,包括 21 次插入7 次删除
  1. 21 7
      Source/cmMakefileTargetGenerator.cxx

+ 21 - 7
Source/cmMakefileTargetGenerator.cxx

@@ -466,15 +466,29 @@ cmMakefileTargetGenerator
     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);
+  std::string targetOutPathPDB;
+  {
+  std::string targetFullPathPDB;
+  const char* configName = this->LocalGenerator->ConfigurationName.c_str();
+  if(this->Target->GetType() == cmTarget::EXECUTABLE)
+    {
+    targetFullPathPDB = this->LocalGenerator->ExecutableOutputPath;
+    targetFullPathPDB += this->Target->GetPDBName(configName);
+    }
+  else if(this->Target->GetType() == cmTarget::STATIC_LIBRARY ||
+          this->Target->GetType() == cmTarget::SHARED_LIBRARY ||
+          this->Target->GetType() == cmTarget::MODULE_LIBRARY)
+    {
+    targetFullPathPDB = this->LocalGenerator->LibraryOutputPath;
+    targetFullPathPDB += this->Target->GetPDBName(configName);
+    }
+  targetOutPathPDB =
+    this->Convert(targetFullPathPDB.c_str(),cmLocalGenerator::FULL,
+                  cmLocalGenerator::MAKEFILE);
+  }
   cmLocalGenerator::RuleVariables vars;
   cmLocalGenerator::RuleVariables vars;
   vars.Language = lang;
   vars.Language = lang;
-  vars.TargetPDB = outpath.c_str();
+  vars.TargetPDB = targetOutPathPDB.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();