Ubuntu下Vscode 配置Json文件使用CMake进行编译

本文介绍了如何使用VSCode创建并管理C/C++项目,包括设置项目文件结构,编写CMakeLists.txt配置文件,利用tasks.json配置编译构建任务,以及通过launch.json配置调试环境。通过这些步骤,可以实现跨平台的统一编译和调试流程。

1.创建我们的C/C++项目文件夹,这里命名为DemoJson,并用VSCode打开该文件夹。
新建下列文件结构

├── DemoJson
│   ├── CMakeLists.txt
│   ├── inc
│   ├── main
│   ├── main.cpp
│   └── src

2.使用CMake构建C/C++项目
CMakeLists.txt 项目cmake配置文件。

cmake_minimum_required(VERSION 3.16)
project(DemoJson)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_EXTENSIONS OFF)

set(CMAKE_BUILD_TYPE Debug)

add_executable(DemoJson main.cpp)

target_link_libraries(demo -lpthread)//linux线程库

3.在配置的时候会用到一些vscode的变量,用${}包裹起来的那些。
${workspaceFolder}是当前工作空间(或vscode所打开根文件夹)在操作系统中绝对路径
${workspaceFolderBasename}是当前工作空间(或vscode所打开根文件夹)的名称

tasks.json 这是VSCode任务的配置文件,通过配置它可以快速执行各种命令。这里我们利用它来配置编译构建流程。我们要执行的任务为建立build文件夹,在build文件夹中使用CMake生成并使用make命令进行编译。通过这个任务配置,统一全平台下的程序编译命令。

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "mkdir",
            "type": "shell",
            "command": "mkdir",
            "args": [
                "-p",
                "build"
            ],
        },
        {
            "label": "cmake",     // 命令的别名
            "type": "shell",         
            "command": "cmake",    // 命令
            "args": [                         // 参数列表
                ".."
            ],
            "options": {
                "cwd": "${workspaceFolder}/build", // 该命令的工作目录
            },
            "dependsOn": [   // 该命令执行前应该执行的命令
                "mkdir" 
            ]
        },
        {
            "label": "make",
            "type": "shell",
            "command": "make",
            "args": [],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "options": {
                "cwd": "${workspaceFolder}/build",
            },
            "dependsOn": [
                "cmake"//make命令执行前先执行cmake命令
            ]
        }
    ]
}

4.launch.json 这是VSCode运行调试的配置文件。全平台统一的调试体验就靠它了。依赖于VSCode的C/C++扩展。这里需要告诉VSCode你的C/C++程序在哪,以及运行参数,工作目录等,用哪个调试器调试。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++: gcc-9 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            // "program": "${workspaceFolder}/build/demo",
            "program": "${workspaceFolder}/build/${workspaceFolderBasename}",//指定C/C++程序位置
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",//指定工作目录
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "make",//*****重要一步*****在调试前会先调用make这个task中编译构建的程序
            "miDebuggerPath": "/bin/gdb"
        }
    ]
}

5.加入断点,按下F5,VSCode开始执行launch.json的命令,在执行前会先运行preLaunchTask,编译C代码。

<think>我们在解决VSCode配置CMake时make命令无效的问题。根据引用内容,我们可以从几个方面排查:环境配置、任务配置、调试配置编译选项。 1. 环境配置:确保已安装必要的构建工具(gcc, g++, make, cmake)并正确设置环境变量。 2. 任务配置(tasks.json):检查任务配置是否正确,特别是工作目录(cwd)和命令路径。 3. 调试配置(launch.json):确保调试器指向正确的可执行文件路径。 4. 编译选项:检查CMakeLists.txt中的构建类型(Debug/Release)和优化选项是否影响调试。 具体步骤: 步骤1:检查基础环境 在终端中运行以下命令,确保工具已安装: ```bash gcc --version g++ --version make --version cmake --version ``` 如果未安装,使用apt安装: ```bash sudo apt update sudo apt install build-essential cmake ``` 步骤2:检查VSCode的任务配置(tasks.json) 根据引用[3],tasks.json配置cmake和make任务。确保: - 工作目录(cwd)设置为build目录(${workspaceFolder}/build) - 命令和参数正确:cmake命令的参数为".."(表示上级目录,即源码目录) - 如果有多个任务,依赖关系正确(如先执行cmake,再执行make) 示例tasks.json(引用[3]): ```json { "version": "2.0.0", "options": { "cwd": "${workspaceFolder}/build" }, "tasks": [ { "type": "shell", "label": "cmake", "command": "cmake", "args": [ ".." ] }, { "label": "make", "group": { "kind": "build", "isDefault": true }, "command": "make", "args": [ ] }, { "label": "Build", "dependsOrder": "sequence", "dependsOn": [ "cmake", "make" ] } ] } ``` 注意:如果之前没有build目录,需要先创建。可以在tasks.json中添加一个创建build目录的任务,或者在任务前添加一条shell命令来创建。 步骤3:检查调试配置(launch.json) 确保launch.json中的程序路径("program")指向build目录中生成的可执行文件。例如: ```json "program": "${workspaceFolder}/build/your_executable" ``` 步骤4:检查CMakeLists.txt的构建类型 根据引用[5],为了能够调试(设置断点),需要设置构建类型为Debug。在CMakeLists.txt中添加: ```cmake set(CMAKE_BUILD_TYPE "Debug") ``` 如果设置为Release,则可能导致断点无效。 步骤5:清理构建目录 有时旧的构建文件可能导致问题,尝试删除build目录并重新生成: ```bash rm -rf build mkdir build && cd build cmake .. make ``` 步骤6:检查VSCode编译器路径设置 在VSCode中,按Ctrl+Shift+P,输入“C/C++: Edit Configurations (UI)”,检查编译器路径是否正确(通常是/usr/bin/gcc或/usr/bin/g++)。 步骤7:查看输出信息 在VSCode中,运行构建任务(Ctrl+Shift+B)时,查看终端输出,是否有错误信息。根据错误信息进一步排查。 常见问题: 1. 如果tasks.json配置了多个任务,但运行Build任务时没有按顺序执行,检查"dependsOrder"和"dependsOn"。 2. 如果make命令找不到,可能是因为环境变量未设置,可以在tasks.json中指定绝对路径(如"/usr/bin/make")或者在VSCode中设置环境变量。 3. 如果cmake配置阶段失败,检查CMakeLists.txt是否有语法错误。 如果以上步骤仍然不能解决问题,请提供更具体的错误信息。 相关问题: 1. 如何在VSCode配置CMake项目的调试环境? 2. 如何设置CMakeLists.txt以支持调试? 3. VSCode中tasks.json和launch.json的关系是什么? 4. 如何解决CMake项目构建失败的问题? 5. 如何在VSCode中查看构建任务的输出日志? </think>### Ubuntu系统下VSCode配置CMake的`make`命令无效解决方案 分析问题根源:根据引用内容,`make`命令无效通常由以下原因导致: 1. **任务依赖配置错误**(引用[3]):tasks.json中任务依赖顺序或路径设置不当 2. **构建类型冲突**(引用[3][5]):编译优化选项(如`-oN`)或Release模式导致调试失效 3. **工作目录不匹配**(引用[1][3]):构建路径与源码路径不一致 4. **环境配置缺失**(引用[4][5]):gdb调试器或编译工具链未安装 --- ### 解决方案步骤 #### 1. 验证基础环境 ```bash # 检查必要组件 sudo apt install build-essential cmake gdb ``` - 确认版本兼容性(引用[4]): ```bash gcc --version # 需≥7.5.0 cmake --version # 需≥3.16 ``` #### 2. 修正tasks.json配置(关键步骤) ```json { "version": "2.0.0", "options": { "cwd": "${workspaceFolder}/build" // 确保指向build目录 }, "tasks": [ { "label": "cmake", "type": "shell", "command": "cmake", "args": [".."], // 源码在build上级目录 "problemMatcher": [] }, { "label": "make", "group": { "kind": "build", "isDefault": true }, "dependsOn": ["cmake"], // 显式声明依赖 "command": "make", "args": ["-j4"] // 添加并行编译参数 } ] } ``` > **注意**:若目录结构不同,需调整`"args": [".."]`中的相对路径(引用[1][3]) #### 3. 禁用编译优化选项 在`CMakeLists.txt`中强制设置Debug模式(引用[5]): ```cmake set(CMAKE_BUILD_TYPE Debug) // 关键!Release模式会导致断点失效 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0") // 关闭优化 ``` #### 4. 配置launch.json调试器 ```json { "version": "0.2.0", "configurations": [ { "name": "C++ Debug", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/your_executable", // 指向构建产物 "cwd": "${workspaceFolder}/build", // 工作目录=构建目录 "MIMode": "gdb", "setupCommands": [{ "text": "enable breakpoint" }] } ] } ``` #### 5. 手动验证构建流程 ```bash cd /project/path rm -rf build && mkdir build # 清理旧构建 cd build cmake -DCMAKE_BUILD_TYPE=Debug .. # 显式指定Debug make VERBOSE=1 # 查看详细编译日志 ``` --- ### 常见故障排查表 | 现象 | 检查点 | 解决方案 | |------|--------|----------| | 任务无响应 | tasks.json依赖缺失 | 添加`"dependsOn":["cmake"]` | | 断点无效 | CMakeLists.txt优化选项 | 禁用`-O2`/`-O3`,使用`-O0` | | 找不到目标 | program路径错误 | 确认可执行文件在`build/`下的位置 | | 符号缺失 | 未生成调试信息 | 确保`-g`标志存在(引用[5]) | > **重要提示**:修改配置后需重启VSCode加载新设置,并使用`Ctrl+Shift+P > CMake: Delete Cache and Reconfigure`清除缓存(引用[3][5]) --- ### 相关问题 1. 如何在VSCode配置CMake项目的多文件编译? 2. CMake的Debug和Release模式在VSCode中有哪些调试差异? 3. 如何解决VSCodeCMake项目的中断点失效问题? 4. Ubuntu下如何升级CMake/GCC以满足VSCode编译要求? 5. VSCode的tasks.json与launch.json如何协同工作?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值