我希望cmake在我的发布版本中生成符号。
我知道我可以生成RelWithDebInfo构建,并在那些中获取符号,但我也想在Release版本中使用符号。我从不想要一个没有符号的构建。
我可以这样做吗?
答案 0 :(得分:10)
为了扩展@ doqtor的正确答案,你有几个选择。将全局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
和generator expressions来应用每个目标的标记:
target_compile_options(example_target PRIVATE
$<$<CXX_COMPILER_ID:MSVC>:/Zi>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-g>
)
从CMake 3.2.2开始,没有内置的CMake方式来指定&#34;打开调试标志&#34;。我不确定这是否会出现在卡片上,因为CMake只能抽象出很多特定于平台的细节。
您可以为调试符号设置的标志在整个平台上实际上是等同的;例如如何以有意义的跨平台方式表达MSVC与Z7
,Zi
和ZI
之间的差异?
答案 1 :(得分:3)
你想要实现的目标是没有意义的,因为你最终会有两个基本相同的目标,但无论如何......你可以通过这种方式将额外的标志传递给编译器(你不说哪个编译器你使用所以我将假设它是gcc):
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
对于除了交换机之外应该类似的其他编译器,以包含可能不同的调试信息符号。