[英]Define DEBUG and RELEASE symbols in Visual Studio Code
在 Ubuntu 18.04 上使用 Visual Studio Code 1.39.2。 My C++ program has tasks for generating a Makefile with Cmake using the command cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Debug..
. 有一个等效的Release
版本。
此后,将运行一个make
任务,该任务在./PROJECT/build/Debug
或./PROJECT/build/Release
文件夹中正确构建 DEBUG 和 RELEASE 版本。
问题是 Visual Studio Code 不理解任何Debug
或_DEBUG
符号,因此如下代码无法按预期工作:
#ifdef _DEBUG // or #ifdef Debug
cout << "Debug build\n";
#else
cout << "Release build\n";
#endif
运行应用程序时,只打印Release build
,从不打印Debug build
。 此外,在 Visual Studio Code 编辑器中, Debug build
行是灰色的。
使用#define DEBUG
手动定义符号是一种选择,但每次更改构建类型时都需要手动编辑文件。
您如何让 Visual Studio Code 根据选定的构建任务来定义和理解正确的符号? 还是有一些聪明的方法让代码“查看”生成的 CMake/make 文件(例如 CMakeCache.txt、cmake_install.cmake、Makefile)?
注意:此解决方案将解决编译期间符号不被理解的问题。 但是,Visual Studio 编辑器不理解_DEBUG
或NDEBUG
符号的问题仍然是一个问题。
在对该问题的评论中,该问题被建议为重复。 有一些重叠,但该问题是指 Eclipse IDE 并使用过时的 CMake 命令。 但它确实提供了一些线索,在深入研究 CMake 文档后,可以通过对CMakeLists.txt
的这些更改来解决问题:
在CMakeLists.txt
的顶部附近,添加以下内容:
if (CMAKE_BUILD_TYPE STREQUAL "")
# Build type is not set eg. command was "cmake .."
message(STATUS " Diag: Build type was unspecified, set to Release")
set(CMAKE_BUILD_TYPE Release)
else ()
message(STATUS " Diag: Build type specified as '${CMAKE_BUILD_TYPE}'")
endif ()
在步骤 1 中的代码之后添加以下内容:
if (${CMAKE_BUILD_TYPE} STREQUAL Debug)
set_directory_properties(PROPERTIES COMPILE_DEFINITIONS "_DEBUG")
else ()
set_directory_properties(PROPERTIES COMPILE_DEFINITIONS "NDEBUG")
endif ()
现在从某个build
文件夹中以下列三种方式之一调用 CMake。 这可以来自命令行,也可以作为 Visual Studio Code 中的任务,然后make
最终的二进制文件:
发布二进制文件和Release build
显示
显示调试二进制文件和Debug build
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.