vscode cmake 构建c++工程配置文件,tasks.json launch.json

vscode cmake 构建c++工程配置文件,tasks.json launch.json


前言

因为c++项目需要使用cmake构建工程,这里记录一下在使用vscode软件,cmake构建c++工程的情况下,tasks.json和launch.json怎么配置。环境是ubuntu 18.04。


一、tasks.json配置

{
    "version": "2.0.0",
    "options": {
        "cwd": "${workspaceRoot}/build"
    },/指定命令执行所在路径
    "tasks": [
        {
            "label": "cmake",
            "type": "shell",
            "command": "cmake",
            "args": [
                "-DCMAKE_BUILD_TYPE=Debug",
                // "-DCMAKE_BUILD_TYPE=Release",
                "-DCMAKE_EXPORT_COMPILE_COMMANDS=1", // 这是生成compile_commands.json文件的选项
                ".."
            ]
        },
        {
            "label": "g++ build active file",/要执行的第二个make命令
            "type": "shell",
            "command": "make",
            "args": [],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "dependsOn":["cmake"]///指定,在执行make之前,需先执行cmake
        },
    ]
}

二、launch.json配置

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/${fileBasenameNoExtension}",
            "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": "g++ build active file",  //这里要和tasks.json中的make的label保持一致
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

总结

参考文章:

  1. https://www.cnblogs.com/liudianfengmang/p/12458108.html

配置好tasks.json和launch.json,按F5就可以直接运行了。

对于C++的开发,我们可以配置VS Codetasks.json文件来自动化执行编译、运行和调试等任务。下面详细介绍配置C++tasks.json文件的步骤和常用属性: 1. 在VS Code中打开一个C++项目,并创建tasks.json文件。 2. 在tasks.json文件中,定义一个编译任务。一般情况下,我们使用g++编译器来编译C++代码。具体的代码如下: ``` { "version": "2.0.0", "tasks": [ { "label": "Compile C++", "type": "shell", "command": "g++", "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"], "group": { "kind": "build", "isDefault": true }, "problemMatcher": { "owner": "cpp", "fileLocation": ["relative", "to", "workspace"], "pattern": { "regexp": "^(.*):(\\d+):(\\d+): (warning|error): (.*)$", "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } } } ] } ``` 解释: - "version": "2.0.0" 表示使用VS Code的最新版本的任务配置格式。 - "tasks" 是一个数组,包含了所有的任务定义。 - "label": "Compile C++" 表示任务的名称,可以根据需要自行修改。 - "type": "shell" 表示使用Shell命令执行任务。 - "command": "g++" 表示要执行的编译命令,这里使用g++编译器。 - "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"] 表示要传递给编译命令的参数,其中: - "-g" 表示生成调试信息。 - "${file}" 表示当前打开的文件。 - "-o" 表示指定输出文件的名称。 - "${fileDirname}/${fileBasenameNoExtension}" 表示输出文件的路径和名称,其中: - "${fileDirname}" 表示当前文件所在的目录。 - "${fileBasenameNoExtension}" 表示当前文件的名称(不包含扩展名)。 - "group" 表示该任务属于build的组,并且是默认的任务。 - "problemMatcher" 用于捕获编译输出的错误信息。 3. 在tasks.json文件中,定义一个运行任务。具体代码如下: ``` { "version": "2.0.0", "tasks": [ { "label": "Run C++", "type": "shell", "command": "${fileDirname}/${fileBasenameNoExtension}", "group": { "kind": "test", "isDefault": true } } ] } ``` 解释: - "version": "2.0.0" 表示使用VS Code的最新版本的任务配置格式。 - "tasks" 是一个数组,包含了所有的任务定义。 - "label": "Run C++" 表示任务的名称,可以根据需要自行修改。 - "type": "shell" 表示使用Shell命令执行任务。 - "command": "${fileDirname}/${fileBasenameNoExtension}" 表示要执行的运行命令,其中: - "${fileDirname}" 表示当前文件所在的目录。 - "${fileBasenameNoExtension}" 表示当前文件的名称(不包含扩展名)。 - "group" 表示该任务属于test的组,并且是默认的任务。 4. 在tasks.json文件中,定义一个调试任务。具体代码如下: ``` { "version": "2.0.0", "tasks": [ { "label": "Debug C++", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false } ] } ``` 解释: - "version": "2.0.0" 表示使用VS Code的最新版本的任务配置格式。 - "tasks" 是一个数组,包含了所有的任务定义。 - "label": "Debug C++" 表示任务的名称,可以根据需要自行修改。 - "type": "cppdbg" 表示使用C++调试器执行任务。 - "request": "launch" 表示启动调试器并进行调试。 - "program": "${fileDirname}/${fileBasenameNoExtension}" 表示要进行调试的程序,其中: - "${fileDirname}" 表示当前文件所在的目录。 - "${fileBasenameNoExtension}" 表示当前文件的名称(不包含扩展名)。 - "args": [] 表示传递给程序的参数,这里为空数组。 - "stopAtEntry": false 表示是否在程序入口处停止调试。 - "cwd": "${workspaceFolder}" 表示程序的工作目录。 - "environment": [] 表示环境变量,这里为空数组。 - "externalConsole": false 表示是否在外部控制台中进行调试。 以上三个任务定义中,"group" 属性用于将任务分组,可以方便地在任务面板中进行查找和执行。同时,"isDefault" 属性用于指定默认执行的任务。 最后,给出两个配置C++tasks.json文件的示例代码: 示例1:使用g++编译和执行C++程序 ``` { "version": "2.0.0", "tasks": [ { "label": "Compile and Run C++", "type": "shell", "command": "g++", "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"], "group": { "kind": "build", "isDefault": true }, "problemMatcher": { "owner": "cpp", "fileLocation": ["relative", "to", "workspace"], "pattern": { "regexp": "^(.*):(\\d+):(\\d+): (warning|error): (.*)$", "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } } }, { "label": "Run C++", "type": "shell", "command": "${fileDirname}/${fileBasenameNoExtension}", "group": { "kind": "test", "isDefault": true } } ] } ``` 示例2:使用CMake编译和执行C++程序 ``` { "version": "2.0.0", "tasks": [ { "label": "Configure CMake", "type": "shell", "command": "cmake", "args": ["-B", ".", "-DCMAKE_BUILD_TYPE=Debug"], "group": { "kind": "build", "isDefault": true } }, { "label": "Build C++", "type": "shell", "command": "cmake", "args": ["--build", "."], "group": { "kind": "build", "isDefault": true }, "problemMatcher": { "owner": "cpp", "fileLocation": ["relative", "to", "workspace"], "pattern": { "regexp": "^(.*):(\\d+):(\\d+): (warning|error): (.*)$", "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } } }, { "label": "Run C++", "type": "shell", "command": "${fileDirname}/build/${fileBasenameNoExtension}", "group": { "kind": "test", "isDefault": true } } ] } ``` 需要注意的是,示例2中的任务需要在C++项目的根目录下包含一个CMakeLists.txt文件,并且使用CMake构建项目。其中,“Configure CMake”任务用于生成构建文件,“Build C++”任务用于编译项目,“Run C++”任务用于运行程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值