From a4da6fa71dc0e0e6102d4b72f7abee00ac4e4110 Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
Date: Wed, 30 Nov 2016 10:20:52 -0500
Subject: [PATCH] Ninja,Makefile: Name static library compile PDB files as VS
 does

Change the default compile PDB file name for static libraries to match
the Visual Studio default of using the logical target name.  This may be
incompatible with existing behavior but `COMPILE_PDB_NAME` documents
that the default is unspecified.  Projects depending on a particular
name should set the property.

Closes: #16438
---
 Source/cmMakefileTargetGenerator.cxx | 7 +++++++
 Source/cmNinjaTargetGenerator.cxx    | 7 +++++++
 2 files changed, 14 insertions(+)

diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx
index 2e5173d5a2..6906a90cbf 100644
--- a/Source/cmMakefileTargetGenerator.cxx
+++ b/Source/cmMakefileTargetGenerator.cxx
@@ -520,8 +520,15 @@ void cmMakefileTargetGenerator::WriteObjectBuildFile(
       targetFullPathCompilePDB =
         this->GeneratorTarget->GetCompilePDBPath(this->ConfigName);
       if (targetFullPathCompilePDB.empty()) {
+        // Match VS default: `$(IntDir)vc$(PlatformToolsetVersion).pdb`.
+        // A trailing slash tells the toolchain to add its default file name.
         targetFullPathCompilePDB =
           this->GeneratorTarget->GetSupportDirectory() + "/";
+        if (this->GeneratorTarget->GetType() == cmStateEnums::STATIC_LIBRARY) {
+          // Match VS default for static libs: `$(IntDir)$(ProjectName).pdb`.
+          targetFullPathCompilePDB += this->GeneratorTarget->GetName();
+          targetFullPathCompilePDB += ".pdb";
+        }
       }
     }
 
diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx
index e47de97d0b..8090542c52 100644
--- a/Source/cmNinjaTargetGenerator.cxx
+++ b/Source/cmNinjaTargetGenerator.cxx
@@ -359,7 +359,14 @@ bool cmNinjaTargetGenerator::SetMsvcTargetPdbVariable(cmNinjaVars& vars) const
       compilePdbPath =
         this->GeneratorTarget->GetCompilePDBPath(this->GetConfigName());
       if (compilePdbPath.empty()) {
+        // Match VS default: `$(IntDir)vc$(PlatformToolsetVersion).pdb`.
+        // A trailing slash tells the toolchain to add its default file name.
         compilePdbPath = this->GeneratorTarget->GetSupportDirectory() + "/";
+        if (this->GeneratorTarget->GetType() == cmStateEnums::STATIC_LIBRARY) {
+          // Match VS default for static libs: `$(IntDir)$(ProjectName).pdb`.
+          compilePdbPath += this->GeneratorTarget->GetName();
+          compilePdbPath += ".pdb";
+        }
       }
     }
 
-- 
GitLab