c++ - 如何仅在 Debug模式下向 cmake 添加符号?

标签 c++ debugging gcc cmake

我希望以下代码仅在 Debug模式下编译

main.cpp

    #ifdef __DEBUG__
        int a=1;
        std::cout<<a;
    #endif

将以下内容添加到 cmake

add_compile_options(
  "-D__DEBUG__"
)

add_compile_options(
  "$<$<CONFIG:DEBUG>:-D__DEBUG__>"
)

似乎什么也没做。

我怎样才能实现期望的行为?

最佳答案

选项 1:NDEBUG

CMake 已经在发布版本期间定义了NDEBUG,只需使用它:

    #ifndef NDEBUG
        int a=1;
        std::cout<<a;
    #endif

选项 2:target_compile_definitions

配置拼写为Debug,而不是DEBUG。由于您不应该永远、永远使用目录级命令(例如add_compile_options),因此我将向您展示如何使用目标级命令相反:

target_compile_definitions(
  myTarget PRIVATE "$<$<CONFIG:Debug>:__DEBUG__>"
)

也没有必要使用过于通用的编译选项命令。 CMake 已经提供了一个抽象来确保预处理器定义可用。

关于c++ - 如何仅在 Debug模式下向 cmake 添加符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70347787/

相关文章:

c++ - 为什么对函数 "sample_mean"的调用不明确?

c++ - 为什么在返回未初始化的变量时编译器不报错?

c++ - 设置 QT_DEBUG_PLUGINS 失败

debugging - IntelliJ 中的 Cucumber.js 调试

android - Bambuser ffmpeg - "arm-linux-androideabi-gcc is unable to create an executable file."

c# - 使用 native C++、托管 C++ cli 和 C# 解决方案在混合模式下进行调试

c++ - 为什么这个透视投影矩阵计算没有给出正确的结果?

javascript - 如何使用 Source Maps 在 Chrome 调试器中黑箱文件?

c - gcc - 属性 nothrow 的用途是什么?

c++ - 这个 "=+"不应该是语法错误吗?