【问题标题】:How to get CMake to install PDB files for targets如何让 CMake 为目标安装 PDB 文件
【发布时间】:2017-04-13 03:03:46
【问题描述】:

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

【问题讨论】:

    标签: c++ visual-studio cmake


    【解决方案1】:

    我已经挣扎了一段时间,试图为这个问题找到一个好的答案。我现在想我找到了一个:使用带有 $<TARGET_PDB_FILE:tgt> 生成器表达式的安装文件命令(在 CMake 3.1.3 和更新版本中可用)。具体来说,下面的安装命令似乎有效。该命令会将目标 ${PROJECT_NAME} pdb 文件复制到目标的安装 bin 目录。

    install(FILES $<TARGET_PDB_FILE:${PROJECT_NAME}> DESTINATION bin OPTIONAL)
    

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

    这是我找到的最佳答案。如果有更好的请告诉我。我在cmake-generator-expressions 文档的“信息表达式”部分发现了一些难以理解的TARGET_PDB_FILE 生成器表达式文档。

    【讨论】:

    • 这仅适用于链接器生成的 .pdbs ,因此根据文档不适用于 STATIC 库。 cmake.org/cmake/help/v3.3/prop_tgt/…
    • @Noki,你是对的。此答案仅适用于共享库。你找到静态库的方法了吗?
    • @Ali 对于静态库,您可以使用 Compile Pdbs。您应该使用目标属性 COMPILE_PDB_OUTPUT_DIRECTORY 和 COMPILE_PDB_NAME,我个人使用库输出目录和库名称,因为最好在安装方法中访问。然后我使用 install(FILES "$/${Name}.pdb" DESTINATION "lib/static/$/${Name}" OPTIONAL) 但选择权在你。文档参考:cmake.org/cmake/help/v3.3/prop_tgt/…
    • 值得一提的是,可以控制安装文件的构建类型:install(FILES $&lt;TARGET_PDB_FILE:${PROJECT_NAME}&gt; CONFIGURATIONS "RelWithDebInfo" DESTINATION bin)
    • 我们可以通过命令行参数传递这些信息吗?因为不想修改现有的cmakefile。
    猜你喜欢
    • 2013-02-03
    • 2023-01-27
    • 1970-01-01
    • 2017-09-07
    • 2018-07-16
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    相关资源
    最近更新 更多