【问题标题】:Define DEBUG and RELEASE symbols in Visual Studio Code在 Visual Studio Code 中定义 DEBUG 和 RELEASE 符号
【发布时间】:2020-03-06 02:30:13
【问题描述】:

在 Ubuntu 18.04 上使用 Visual Studio Code 1.39.2。我的 C++ 程序具有使用命令cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Debug .. 使用 Cmake 生成 Makefile 的任务。有一个等效的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 根据选定的构建任务定义和理解正确的符号?或者是否有一些巧妙的方法让 Code “查看”生成的 CMake/make 文件(例如 CMakeCache.txt、cmake_install.cmake、Makefile)?

【问题讨论】:

  • cmake 是一个命令行实用程序,仅由 VS Code 触发。它在命令行中是否按预期工作?如果没有,您可以从此问题中删除对 VS Code 的所有引用,以稍微缩小范围。
  • 不是重复的。另一个问题既与 Visual Studio Code 无关,也与 CMake 3.13 无关(提到的命令显然已过时),它们也不起作用。
  • _DEBUG 和相关符号通常在命令行 (/D_DEBUG) 上传递给编译器。
  • @1201ProgramAlarm:你知道如何让 Visual Studio Code 了解定义吗?

标签: c++ debugging visual-studio-code cmake


【解决方案1】:

注意:此解决方案将解决编译期间符号不被理解的问题。但是,Visual Studio 编辑器不理解 _DEBUG 或 NDEBUG 符号的问题仍然存在。

在问题的 cmets 中,this question 被建议为重复项。有一些重叠,但该问题是指 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

【讨论】:

    猜你喜欢
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多