我可以让cmake始终生成调试符号吗?

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,ZiZI以有意义的跨平台方式表达?


doq*_*tor 5

您想要实现的目标没有意义,因为您最终将有 2 个目标基本相同,但无论如何……您可以通过这种方式将其他标志传递给编译器(您没有说您使用的是哪个编译器,所以我我将假设它是 gcc):

SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")

对于其他应该相似的编译器,除了包含可能不同的调试信息符号的开关。