10

我正在使用 CMake 命令安装 PDB 文件,以便在我的 C++ 应用程序的开发人员分发中启用调试。命令如下:

INSTALL(DIRECTORY ${PROJECT_BINARY_DIR}/Debug
    DESTINATION bin
    FILES_MATCHING
    PATTERN *.pdb
)

此外,我已设法将用于构建该开发人员分发的相关源代码安装在同一级别的“src”文件夹中,以便我的顶级分发文件夹如下所示:

include\
src\
lib\
bin\
share\
doc\
3rdparty\
etc\

如何让 PDB 文件“知道”源在哪里(我假设这是必需的)?是否有可以实现此目的的 CMake 命令?什么是一个小例子?

4

4 回答 4

14

我刚刚回答了我自己的类似问题,如何让 CMake 为目标安装 PDB 文件

使用此安装规则将目标的 PDB 文件(如果存在)复制到目标的安装位置 bin 目录。

install(FILES $<TARGET_PDB_FILE:${PROJECT_NAME}> DESTINATION bin OPTIONAL)
于 2016-11-29T07:56:32.233 回答
4

PDB 文件存储源文件的绝对路径名。当不使用符号服务器时,确保某种程度的源代码可重定位性的唯一方法是使用subst命令。

这个想法是用来为源树的根subst创建一个驱动器号名称(例如N:\)。然后从该驱动器进行构建,以便以开头的绝对路径N:\嵌入到 PDB 文件中。当您以后需要在另一台机器上调试可执行文件时,请subst在该机器上使用以获取到源的相同绝对路径。这将使 PDB 文件能够找到源文件。

例如,如果您有一个文件C:\MySources\main.cpp,请执行以下操作:

subst N: C:\MySources
N:
run your build

稍后,假设您需要在存储相同文件的机器上进行调试D:\Devel\Other\main.cpp。简单地做subst N: D:\Devel\Other,然后从N:那里的驱动器工作。


这个答案主要基于来自这个问题的信息和其中的链接。

于 2013-03-04T11:26:30.600 回答
2

您只需要通知 Visual Studio 源在哪里...它会弹出一个文件浏览器对话框;如果路径与构建时不同,只需指向本地计算机上的源。

于 2013-09-18T21:03:12.877 回答
0

PDB 文件存储文件的路径,就像编译程序时一样。您无需做任何事情来让他们知道源头哪里。

于 2013-02-18T23:00:41.773 回答