Visual Studio代码不理解CMake-DDEBUG



使用CMake 3.15.3和Visual Studio代码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代码编辑器不了解DEBUG符号是否实际定义。代码总是假定"未定义DEBUG,并灰显DebugFunction

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

对于windows,您可以尝试集合(CMAKE_CXX_FLAGS_DEBUG"${CMAKE_CXX _FLAGS.DEBUG}/DEBUG"(或add_definitions("-DDEBUG"(

我无法让VS Code识别我添加到CMake中的任何内容,但经过一些研究,我改用NDEBUG。这是C标准的一部分,由CMake自动设置,并由VS Code中的Intellicode识别,因此它会变灰或不适当,CMakeLists.txt文件中没有任何更改。

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

最新更新