在Visual Studio代码中定义DEBUG和RELEASE符号

Define DEBUG and RELEASE symbols in Visual Studio Code

本文关键字:DEBUG RELEASE 符号 定义 Visual Studio 代码      更新时间:2023-10-16

在Ubuntu 18.04上使用Visual Studio代码1.39.2。我的C++程序有使用命令cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Debug ..生成带有Cmake的Makefile的任务。有一个等效的Release版本。

此后,运行make任务,该任务在./PROJECT/build/Debug./PROJECT/build/Release文件夹中正确构建调试和发布版本。

问题是Visual Studio代码不理解任何Debug_DEBUG符号,因此以下代码无法按预期工作:

#ifdef _DEBUG   // or #ifdef Debug
cout << "Debug buildn";
#else
cout << "Release buildn";
#endif

运行应用程序时,只打印Release build,从不打印Debug build。此外,在Visual Studio代码编辑器中,Debug build行显示为灰色。

使用#define DEBUG手动定义符号是一种选择,但每次更改构建类型时都需要手动编辑文件。

如何让Visual Studio代码根据所选的生成任务定义和理解正确的符号?或者有什么聪明的方法可以让Code"查看"生成的CMake/make文件(如CMakeCache.txt、CMake_install.CMake、Makefile(?

注意:此解决方案将解决编译过程中无法理解符号的问题。然而,Visual Studio编辑器不理解用于表示的_DEBUGNDEBUG符号的问题仍然存在。

在对该问题的评论中,有人建议将该问题作为重复问题。有一些重叠,但这个问题涉及EclipseIDE并使用过时的CMake命令。但它确实提供了一些线索,在深入研究CMake文档后,通过对CMakeLists.txt:的这些更改,可以解决问题

步骤1-如果需要,显式设置CMake构建类型

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 ()

步骤2-定义"_DEBUG"和其他符号

在步骤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代码中的任务,然后make最终的二进制文件:

  • cmake
  • cmake-G"Unix Makefiles"-DCMAKE_BUILD_TYPE=发布

发布二进制文件,Release build显示

  • cmake-G"Unix Makefiles"-DCMAKE_BUILD_TYPE=调试

调试二进制文件和Debug build显示

您可以添加&quot-D _ DEBUG";在task.json文件中;args":当您添加此参数时,使用CTL+F5,您可以在调试模式下进行构建。