gpt4 book ai didi

visual-c++ - cmake - 从对象库中提取 pdb 文件

转载 作者:行者123 更新时间:2023-12-01 19:47:58 25 4
gpt4 key购买 nike

我正在使用 object libraries 构建我的静态库如使用 CMake 3.1.3 所示。

我有

ADD_SUBDIRECTORY(A)
ADD_SUBDIRECTORY(B)
....
ADD_LIBRARY(mylib STATIC ${SOURCES}
$<TARGET_OBJECTS:A>
$<TARGET_OBJECTS:B> )
SET_TARGET_PROPERTIES(mylib PROPERTIES COMPILE_PDB_NAME mylib COMPILE_PDB_OUTPUT_DIR ${CMAKE_BINARY_DIR})

现在,我的问题是A在A的CMake子目录中生成vc120.pdb。B 在 B 的 CMake 子目录中生成自己的 vc120.pdb。并且,mylib 在主二进制 cmake 文件夹中生成 mylib.pdb。

我只想要一个静态库和一个pdb文件。我只想要 mylib 和 mylib.pdb。

如何将所有 vc120.pdb 合并到 mylib.pdb 中,或者理想情况下只生成一个 pdb 文件?

最佳答案

这不是对您问题的直接答案,而是您可能需要考虑的替代解决方案。

对于静态库,您最好使用 /Z7 来生成调试信息。使用 /Z7 时,编译器不会生成 .PDB 文件,而是将调试信息直接嵌入到生成的目标文件中。

当这些目标文件作为静态库链接时,lib.exe 会将所有目标文件中的调试信息复制到生成的 .lib 文件中。不需要将 .pdb 文件与 .lib 文件一起分发。

与 CMake 用于生成 DLL 或 EXE 的 link.exe 不同,lib.exe 没有输出 .PDB 文件的选项。

通过CMake,您可以通过以下方式设置所需的选项。对于对象库使用:

add_library(A OBJECT lib2.cpp)
set_target_properties(A PROPERTIES COMPILE_OPTIONS "/Z7")

要生成最终的静态库,请使用:

add_library(mylib STATIC main.cpp $<TARGET_OBJECTS:A> $<TARGET_OBJECTS:B> )
set_target_properties(mylib PROPERTIES COMPILE_OPTIONS "/Z7")

关于visual-c++ - cmake - 从对象库中提取 pdb 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29545969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com