如何让CMake为目标安装PDB文件

Phi*_*hil 20 c++ cmake visual-studio

如何让CMake安装调试Visual Studio生成的DLL文件和EXE文件所需的配套PDB文件?

Phi*_*hil 22

我一直在努力寻找这个问题的好答案.我现在认为我找到了一个:使用带有$<TARGET_PDB_FILE:tgt>生成器表达式的安装文件命令(在CMake 3.1.3和更新版本中可用).具体来说,下面的安装命令似乎工作.该命令会将目标$ {PROJECT_NAME} pdb文件复制到目标的安装bin目录.

install(FILES $<TARGET_PDB_FILE:${PROJECT_NAME}> DESTINATION bin OPTIONAL)
Run Code Online (Sandbox Code Playgroud)

该命令将为生成pdb文件的每个配置安装pdb文件.OPTIONAL如果源pdb文件不存在,则使用install命令不会生成错误.此命令用于使用add_library(${PROJECT_NAME} ...)add_executable(${PROJECT_NAME} ...)命令创建的目标.

这是我找到的最佳答案.如果有更好的,请告诉我.我TARGET_PDB_FILEcmake-generator-expressions文档的"Informational Expressions"部分找到了一些难以理解的生成器扩展文档.

  • @Ali 对于静态库,您可以使用 Compile Pdbs。您应该使用目标属性,COMPILE_PDB_OUTPUT_DIRECTORY 和 COMPILE_PDB_NAME,我个人使用库输出目录和库名称,因为最好在安装方法中访问。然后我使用 install(FILES "$&lt;TARGET_FILE_DIR:${Name}&gt;/${Name}.pdb" DESTINATION "lib/static/$&lt;CONFIG&gt;/${Name}" OPTIONAL) 但选择权在你。文档参考:https://cmake.org/cmake/help/v3.3/prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY.html#prop_tgt:COMPILE_PDB_OUTPUT_DIRECTORY (4认同)
  • 这仅适用于链接器生成的 .pdbs ,因此根据文档不适用于 STATIC 库。https://cmake.org/cmake/help/v3.3/prop_tgt/PDB_OUTPUT_DIRECTORY.html#prop_tgt:PDB_OUTPUT_DIRECTORY (2认同)
  • 值得一提的是,可以控制安装文件的构建类型:`install(FILES $ &lt;TARGET_PDB_FILE:$ {PROJECT_NAME}&gt; CONFIGURATIONS“ RelWithDebInfo” DESTINATION bin)。 (2认同)