如何在使用CMake编译静态库的发布版本时获取pdb文件?

7 浏览
0 Comments

如何在使用CMake编译静态库的发布版本时获取pdb文件?

我有一个使用CMake编译的静态库。现在,当我以调试模式编译时,会生成pdb文件,但当编译发布模式时,不会生成pdb文件。以下是CMake中的代码片段:

如果构建类型为"Debug",则设置目标属性为"Debug",设置编译pdb名称为项目名称,将编译pdb输出目录设置为"${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bin_debug"。

如果构建类型为"Release",则设置目标属性为"Release",设置编译pdb名称为项目名称,将编译pdb输出目录设置为"${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bin_release"。

我希望在调试和发布构建中都有pdb文件。请问如何实现?非常需要建议。

0
0 Comments

问题原因:在使用CMake编译静态库的发行版本时,无法获得pdb文件。

解决方法:可以通过在CMake中添加编译选项来为其他配置(如Release)添加调试信息,可以使用target_compile_options()和generator expressions来给出必要的/Zi或/Z7命令。另外,也可以使用add_compile_options()为所有配置和所有目标添加调试信息。

参考链接:

- [How to have .pdb files generated after compiling third party libraries?](https://stackoverflow.com/questions/33498540)

- [For Cmake, can you modify the release/debug compiler flags with `add_compiler_flags()` command?](https://stackoverflow.com/questions/33829152)

- [cmake - extracting pdb files from object libraries](https://stackoverflow.com/questions/29545969)

感谢您的建议,确实起到了作用,现在我同时拥有调试和发布版本的pdb文件。

0
0 Comments

问题的原因是在使用CMake生成Visual Studio项目和解决方案文件时,默认情况下,VS不会在发布配置中生成.pdb文件。为了生成.pdb文件,需要在项目文件中设置一些属性。因此,需要让CMake输出类似下面的内容到生成的.xxproj文件中:


    pdbonly
    false
    true

这些属性将为您提供一个除了生成.pdb文件外,其他与发布/优化构建相同的构建。

PropertyGroup的内容可能因配置而异,但您需要将这些子属性添加到正在编译的配置中。

在.xxproj文件中,我可以看到以下内容:


  C:\repo\Release\minizip.pdb

但只创建了Release文件夹,且其中为空。

根据CMake文档,似乎有一个名为“目标变量”的东西:VS_GLOBAL_<variable>,其中<variable>是应该在项目文件中的变量名称。您可以尝试通过这种方式定义DebugType=pdbonly。

0