Tom*_*don 5 c++ symbols cmake debug-symbols
我希望cmake在我的Release版本中生成符号.
我知道我可以生成RelWithDebInfo构建,并在那些中获取符号,但我也想在Release版本中使用符号.我从不想要没有符号的构建.
我可以这样做吗?
Fra*_*ser 12
只是为了扩展@ doqtor的正确答案,你有几个选择.设置 _FLAGS"变量的v3.2文档">CMAKE_CXX_FLAGS
将这些标志应用于所有构建类型的全局:
if(MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
endif()
Run Code Online (Sandbox Code Playgroud)
或者对于更精细的控制,target_compile_options
与生成器表达式一起使用以应用每个目标的标志:
target_compile_options(example_target PRIVATE
$<$<CXX_COMPILER_ID:MSVC>:/Zi>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-g>
)
Run Code Online (Sandbox Code Playgroud)
从CMake 3.2.2开始,没有内置的CMake方式来指定"打开调试标志".我不确定这是否会出现在卡片上,因为CMake只能抽象出很多特定于平台的细节.
您可以为调试符号设置的标志在整个平台上无法真正等同; 例如,MSVC之间的区别如何Z7
,Zi
并ZI
以有意义的跨平台方式表达?
您想要实现的目标没有意义,因为您最终将有 2 个目标基本相同,但无论如何……您可以通过这种方式将其他标志传递给编译器(您没有说您使用的是哪个编译器,所以我我将假设它是 gcc):
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
对于其他应该相似的编译器,除了包含可能不同的调试信息符号的开关。