我正在使用CMake在Windows(Visual Studio)以及Linux机器(gcc)上构建我的项目.我想将一些代码标记为"仅调试",就像使用
#ifdef DEBUG
//some logging here
#endif
Run Code Online (Sandbox Code Playgroud)
问题是:CMake"Debug"构建类型中的所有平台上都有哪些编译器定义?DEBUG似乎不存在.(我希望只有在构建类型为Debug时才能进行日志记录或其他任何操作.)
arr*_*owd 89
CMake -DNDEBUG
默认添加到CMAKE_C_FLAGS_ {RELEASE,MINSIZEREL}.所以,你可以使用#ifndef NDEBUG
.
Lin*_*cer 23
我建议你添加自己的定义.该CMake
符号CMAKE_C_FLAGS_DEBUG
只能包含在调试模式下使用的标志.例如:
C
:
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DMY_DEBUG")
Run Code Online (Sandbox Code Playgroud)
C++
:
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DMY_DEBUG")
Run Code Online (Sandbox Code Playgroud)
在您的代码中,您可以编写以下内容:
#ifdef MY_DEBUG
// ...
#endif
Run Code Online (Sandbox Code Playgroud)
(也许,你必须使用"/DMY_DEBUG"
视觉工作室.)
在CMake> = 2.8中,使用target_compile_definitions
:
target_compile_definitions(MyTarget PUBLIC "$<$<CONFIG:DEBUG>:DEBUG>")
Run Code Online (Sandbox Code Playgroud)
在调试模式下编译时,这将定义在代码中使用的DEBUG符号.它甚至可以在像Visual Studio和Xcode这样的IDE中工作,cmake为所有编译模式生成单个文件.
你必须为每个目标做到这一点[1].或者你可以使用add_compile_options
(Cmake> = 3.0):
add_compile_options("$<$<CONFIG:DEBUG>:-DDEBUG>")
Run Code Online (Sandbox Code Playgroud)
请注意,Visual C++的最新版本(至少从VS2015开始)允许使用/或 - for参数,因此它应该在编译器之间正常工作.此命令对于您可能要添加的其他编译选项也很有用(在MSVC的发布模式下为"/ O2",在G ++/Clang中为发布模式为"-O3")
[1]:注意:在CMake> = 3.12(目前为beta)中,还有一个add_compile_definitions
支持生成器表达式,它影响所有目标.
归档时间: |
|
查看次数: |
22999 次 |
最近记录: |