使用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