我可以让cmake总是生成调试符号吗?
Can I make cmake always generate debugging symbols?
我想让cmake在我的发布版本中生成符号。
我知道我可以生成RelWithDebInfo构建,并在那些中获得符号,但我也想在发布构建中获得符号。我从来不想要一个没有符号的建筑。
我可以这样做吗?
只是为了扩展@ doctor的正确答案,您有几个选择。或者全局设置CMAKE_CXX_FLAGS
,将这些标志应用于所有构建类型:
if(MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
endif()
或者对于更细粒度的控制,使用target_compile_options
和生成器表达式来应用每个目标的标志:
target_compile_options(example_target PRIVATE
$<$<CXX_COMPILER_ID:MSVC>:/Zi>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-g>
)
从CMake 3.2.2开始,没有内置的CMake方法来指定"打开调试标志"。我不确定这是否会成为可能,因为CMake可以抽象的平台特定细节只有这么多。
你可以为调试符号设置的标志在不同的平台上是不一样的;例如,MSVC的Z7
, Zi
和ZI
之间的差异如何以有意义的跨平台方式表达?
你想要实现什么是没有意义的,因为你最终会有两个目标做基本相同,但无论如何…你可以通过这种方式向编译器传递额外的标志(你没有说你使用哪个编译器,所以我假设它是gcc):
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
对于其他应该相似的编译器,除了包含可以不同的调试信息符号的开关。
相关文章:
- VC++本机单元测试,找不到调试符号
- 调试符号中缺少 QObject 类信息(编辑但存在其他 Qt 类)
- 有没有一种预处理器的方法可以从调试符号中删除代码段
- 简单的cmake项目,在Windows上使用nmake构建没有调试符号
- 重新定位源文件时读取调试符号
- 如何将libc++与调试符号链接起来?
- 在 gdb (Windows) 中添加 dll 的调试符号
- 从静态库中去除/删除调试符号和存档名称
- Nodejs本机模块 - 如何删除调试符号
- 如何告诉 clang 将调试符号放入可执行二进制文件中
- G++ 不生成调试符号
- 如何为安卓原生应用生成调试符号
- Makefile和QT5:链接QT5与调试符号
- 找不到调试符号
- 我如何检查静态库,以查看是否正在导出调试符号
- 公开使用多种语言编译的程序的调试符号
- 用调试符号编译需要其他库
- 程序在没有调试符号的情况下崩溃,运行良好(两种情况下都没有优化或任何内容)
- 如何在不调试符号的情况下确定从外部库引发的异常
- 找不到GDB调试符号