【问题标题】:How to use DEBUG macro with cmake?如何在 cmake 中使用 DEBUG 宏?
【发布时间】:2021-07-11 03:19:02
【问题描述】:

我是 cmake 的新手,所以在前面,我很抱歉这个问题太基础了..

问题是,

我在#ifdef DEBUG 下有日志,我只想为调试构建打印这些日志。

类似这样的..

void func () {

// some code here 

#ifdef DEBUG
    print_log(...) // this portion should execute only for debug builds
#endif 

// some code here

}

如何使用 cmake 实现这一点?

我已经看过#ifdef DEBUG with CMake independent from platformcmakelists debug flag not executing code within "ifdef DEBUG",这里的建议似乎对我不起作用

(项目在Linux平台上)

【问题讨论】:

标签: c++ c cmake


【解决方案1】:

现代 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>:-DDEBUG>>
)

【讨论】:

    【解决方案2】:
    1. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG") 添加到CMakeLists.txt
    2. 已创建Debug/ 目录和cd Debug
    3. cmake -DCMAKE_BUILD_TYPE="Debug" ../

    工作!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      相关资源
      最近更新 更多