我是 cmake 的新手,所以首先,我很抱歉这个问题太基本了..
问题是,
我有一些日志#ifdef DEBUG
,我只想在其下打印调试版本。
像这样的东西..
void func () {
// some code here
#ifdef DEBUG
print_log(...) // this portion should execute only for debug builds
#endif
// some code here
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能用 cmake 实现这一点?
我已经看过#ifdef DEBUG 与 CMake 独立于平台和cmakelists 调试标志不执行 "ifdef DEBUG" 内的代码,这里的建议似乎对我不起作用。
(项目是在Linux平台上)
现代 CMake 使用基于目标的方法,允许您指定仅限于目标的设置,而不是全局设置(并影响所有目标)。然后,您可以控制指定目标的状态如何传递到依赖目标,从而减少状态的可见范围(包括路径、库依赖项、编译器定义、编译器标志等)到依赖目标。您决定采用的方法在很大程度上取决于您的应用程序的复杂程度,例如系统中存在多少个目标(可执行文件和库)。系统越复杂,使用基于目标的方法在降低复杂性和编译时间方面获得的好处就越大。在最简单的情况下,使用基于现代目标的 CMake 方法进行设置,您可以使用以下命令(其中exe
是可执行文件的名称:
add_executable(exe "")
target_sources(exe
PRIVATE
main.cpp
)
target_compile_definitions(exe
PRIVATE
# If the debug configuration pass the DEBUG define to the compiler
$<$<CONFIG:Debug>:DEBUG>
)
Run Code Online (Sandbox Code Playgroud)