【问题标题】:Visual Studio Code not understanding CMake -DDEBUGVisual Studio Code 不理解 CMake -DDEBUG
【发布时间】:2019-11-05 23:34:52
【问题描述】:

使用 CMake 3.15.3 和 Visual Studio Code 1.39.2 在 Ubuntu 18.04 上进行开发。我的 C++ 项目有一个 CMakeLists.txt,其中包含以下行:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG")

在 C++ 代码中,DEBUG 定义可以这样检查:

#ifdef DEBUG
    DebugFunction();
#else
    ReleaseFunction();
#endif

这一切都按预期工作。注释掉set(CMAKE_CXX_FLAGS_DEBUG... 行并调用ReleaseFunction。取消注释并调用DebugFunction

问题在于 Visual Studio Code 编辑器不理解 DEBUG 符号是否实际定义。代码始终假定 ``DEBUG 未定义并显示为灰色 DebugFunction

是否有一种简单的方法可以让 Visual Studio Code 了解哪些符号已定义,哪些未定义?大概这需要让代码查看内部CMakeLists.txt...但是如何?

【问题讨论】:

    标签: c++ visual-studio-code cmake


    【解决方案1】:

    对于windows,也许你可以试试 设置(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /DEBUG") 或者 add_definitions("-DDEBUG")

    【讨论】:

    • 会尝试,虽然我在 Linux 上开发。问题不在于符号对gcc 不可见(它是),而是Code 不可见。
    【解决方案2】:

    我无法让 VS Code 识别我添加到 CMake 中的任何内容,但经过一些研究后,我转而使用 NDEBUG。这是 C 标准的一部分,由 CMake 自动设置,并由 VS Code 中的 Intellicode 识别,因此在 CMakeLists.txt 文件中没有任何更改的情况下,它会显示为灰色或不正确。

    #ifndef NDEBUG
      ReleaseFunc();
    #else
      DebugFunc();
    #endif
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-23
      • 2021-01-14
      • 2021-09-14
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 2019-05-05
      相关资源
      最近更新 更多