如何在使用CMake编译静态库的发布版本时获取pdb文件?
如何在使用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文件。请问如何实现?非常需要建议。
问题原因:在使用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文件。
问题的原因是在使用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。