diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index 74eca71b74..cb539b3916 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -1313,15 +1313,10 @@ std::string cmGeneratorTarget::GetCompilePDBName( return components.prefix + pdbName + ".pdb"; } - // If the target is PCH-reused, we need a stable name for the PDB file so - // that reusing targets can construct a stable name for it. - if (this->PchReused) { - NameComponents const& components = GetFullNameInternalComponents( - config, cmStateEnums::RuntimeBinaryArtifact); - return cmStrCat(components.prefix, this->GetName(), ".pdb"); - } - - return ""; + // Always use a name for the compile-time database. + NameComponents const& components = + GetFullNameInternalComponents(config, cmStateEnums::RuntimeBinaryArtifact); + return cmStrCat(components.prefix, this->GetName(), ".pdb"); } std::string cmGeneratorTarget::GetCompilePDBPath( diff --git a/Tests/MSVCDebugInformationFormat/CMakeLists.txt b/Tests/MSVCDebugInformationFormat/CMakeLists.txt index b09bc6c416..4b3f28092d 100644 --- a/Tests/MSVCDebugInformationFormat/CMakeLists.txt +++ b/Tests/MSVCDebugInformationFormat/CMakeLists.txt @@ -79,3 +79,11 @@ endif() if(CMake_TEST_Fortran) verify(Fortran verify.F90) endif() + +# Issue 27401; 4.2.0 regression +add_library(PdbCompileFileName PdbCompileFileName.c) +target_compile_definitions(PdbCompileFileName + PRIVATE + "TARGET_DIRECTORY=\"$\"") +set_property(TARGET PdbCompileFileName PROPERTY + MSVC_DEBUG_INFORMATION_FORMAT "ProgramDatabase") diff --git a/Tests/MSVCDebugInformationFormat/PdbCompileFileName.c b/Tests/MSVCDebugInformationFormat/PdbCompileFileName.c new file mode 100644 index 0000000000..6c7678b751 --- /dev/null +++ b/Tests/MSVCDebugInformationFormat/PdbCompileFileName.c @@ -0,0 +1,15 @@ +#include + +int main(int argc, char* argv[]) +{ + int ret = 0; + char const* fname = TARGET_DIRECTORY "/PdbCompileFileName.pdb"; + FILE* f = fopen(fname, "r"); + if (f) { + fclose(f); + } else { + printf("Failed to open PDB file '%s'\n", fname); + ret = 1; + } + return ret; +}