繁体   English   中英

在 Visual Studio Code 中定义 DEBUG 和 RELEASE 符号

[英]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 编辑器不理解_DEBUGNDEBUG符号的问题仍然是一个问题。

在对该问题的评论中,该问题被建议为重复。 有一些重叠,但该问题是指 Eclipse IDE 并使用过时的 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 Code 中的任务,然后make最终的二进制文件:

  • cmake..
  • cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Release..

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

  • cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Debug..

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM