You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS Code中无需脚本实现CMake+Make分环境构建问题求助

问题描述

运行Fedora 42工作站版,使用VS Code 1.104.1,当前依赖Shell脚本完成CMake+Make的两步项目构建,希望移除脚本,直接通过Ctrl+Shift+B构建或F5启动调试/运行,同时保证Debug与Release环境的中间文件、可执行文件完全隔离。

解决方案

1. 调整CMakeLists.txt

移除硬编码的CMAKE_BUILD_TYPE,让构建任务动态指定类型,确保两种环境可切换:

cmake_minimum_required(VERSION 3.10)
project(dirsize)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_compile_options(-Wall -Wextra -Werror)

include_directories(src)

set(SOURCES
    src/dirsize.cpp
)

add_executable(dirsize ${SOURCES})

2. 重构tasks.json(整合构建逻辑)

将原Shell脚本中的步骤直接写入VS Code任务,无需额外脚本:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build dirsize Debug",
      "type": "shell",
      "command": "mkdir -p build/debug && cd build/debug && [ ! -f CMakeCache.txt ] && cmake ../.. -DCMAKE_BUILD_TYPE=Debug || true && make -j$(nproc)",
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "problemMatcher": ["$gcc"],
      "options": {
        "cwd": "${workspaceFolder}"
      }
    },
    {
      "label": "build dirsize Release",
      "type": "shell",
      "command": "mkdir -p build/release && cd build/release && [ ! -f CMakeCache.txt ] && cmake ../.. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS_RELEASE=\"-O3 -ffunction-sections -fdata-sections -s -DRELEASE_BUILD\" -DCMAKE_EXE_LINKER_FLAGS=\"-Wl,--gc-sections -s\" || true && make -j$(nproc) && strip dirsize && ls -lh dirsize",
      "group": "build",
      "problemMatcher": ["$gcc"],
      "options": {
        "cwd": "${workspaceFolder}"
      }
    }
  ]
}
  • mkdir -p确保构建目录存在
  • [ ! -f CMakeCache.txt ] && cmake ... || true实现仅首次构建时执行CMake配置,后续直接执行Make
  • -j$(nproc)利用全部CPU核心加速构建
  • Release任务保留原脚本的编译器/链接器优化参数与可执行文件瘦身步骤

3. 配置launch.json(支持F5一键构建启动)

添加调试配置,关联对应构建任务,实现F5自动构建并启动:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug dirsize",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/build/debug/dirsize",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "preLaunchTask": "build dirsize Debug",
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ]
    },
    {
      "name": "Release dirsize",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/build/release/dirsize",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "preLaunchTask": "build dirsize Release"
    }
  ]
}
  • preLaunchTask指定启动前自动执行的构建任务
  • program对应不同构建类型的可执行文件路径,保证环境隔离

内容的提问来源于stack exchange,提问作者Alex Sokolek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 08:13:13