vscode一键配置C/C++多个C及CPP文件编译与tasks.json和launch.json原理

vscode下Cmake配置及C/C++环境配置原理

vscode一键配置配置C/C++/Cmake/make调试环境及配置原理

搜了很多的教程,发现要么教程太老,给的配置信息里面有些参数都不能使用了,要么就是直接扔下自己的配置信息就没了,不知道咋来的,也不能拿过来直接用,让我这种小白无从下手,于是就摸索整理一下,帮助一下像我这样小白刚入手的小伙伴们。

嫌每次配置麻烦的小伙伴,后文放有一键创建code下的c/c++cmake项目小工具。

原理

我觉得最重要的就是我们要明白各个配置文件是干嘛的,它是怎么被vscode使用的,明白这一点,那么自己就可以比较清晰参数该怎么改,应该改哪些参数,而不是拿着别人的配置文件,无从下手。

本文的重点也旨在让不懂的伙伴知道自己 ==》 如何去修改这些配置,明白后配置别的语言也是相同的原理。 文中的配置更多的是一个参考。

配置文件基本的原理:

vscode与代码运行调试相关的最基本的两个配置文件是tasks.jsonlaunch.json文件(这两个文件一般都是在vscode当前打开的文件夹下的 .vscode 文件夹中,没有可以手动创建,只要位置正确就可以生效)。

launch.json: 这个配置文件是告诉vscode如何来启动调试你的代码程序的,这其中包括你的程序在哪个位置,你用什么工具来调试,调试的时候需要给调试工具传什么参数等。
tasks.json: 这个配置文件是用来执行你预定的任务的,比如说你修改了你的代码,调试之前,肯定要重新生成新的程序后再调试,那么你就可以配置它告诉vscode怎么重新生成这个新的程序。(task.json不是必须文件,比如python调试,可以不用提前编译)

vscode就是先跑 tasks.json 任务,再跑 launch.json。

说明一点: vscode调用任务是根据lable标签识别的(文章后面有说明)。

"lable": "startRun"

那么启用这个任务就是启用startRun。

具体配置

我这里的配置都没有用到VS相关,用的是跨平台的g++、gcc,在Windows上面就是安装MinGW,我用的是MinGW64(gcc version 8.1.0 x86_64)。

如果只是跑单个的C/C++文件

直接安装C++插件后,就可以直接写代码跑了。(2020/12/09更新)
点击左边扩展商店搜索c++。
在这里插入图片描述

如果有多个文件或项目文件

如果你写的代码有多个文件,或者使用第三方库的时候有多个代码文件,这里就是使用makefiles构建程序了。

makefiles是用来组织管理不同文件的编译链接顺序等用,可以简单理解为gcc/g++命令后面那一大串参数都放这里了,不用每次手敲,Cmake就是用来生成makefiles的,因为makefiles靠手写也是很麻烦的。

思路:

1.cmake生成makefiles
2.make编译
3.调试

当然上面的步骤,我们是配置到tasks.json中自动执行的。

上面的make命令就是MinGW安装目录下bin目录下的的mingw32-make.exe,在tasks.json中配置此命令。

一、先看这个launch.json文件,这个文件基本框架是vscode自动生成的,具体方法是:菜单栏==>运行==>打开配置文件。手动创建也可,上文有说明,内容按下面填就行。

注释中的举例部分内容来自:这里

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++.exe - 生成和调试活动文件",
             // type 告诉vscode编译器的类型,我用的MinGW64也就是g++,这里是cppdgb
             // 这个是规定的,不是随便写,比如msvc编译器就是cppvsdbg
            "type": "cppdbg", 
            "request": "launch",
            // program 这个是你的可执行程序位置,这里可以根据自己的tasks.json生成
            // 程序的位置自定义修改,等会参照后面的tasks.json内容
            "program": "${workspaceFolder}\\build\\${workspaceRootFolderName}.exe",
            // ${xxxx}是vscode内置的变量,可以方便获取到需要的路径或者文件名,
            // 具体什么变量参考别人的博客,
            // 这里列举一部分
            // ${workspaceFolder} :表示当前workspace文件夹路径,也即/home/Coding/Test
			// ${workspaceRootFolderName}:表示workspace的文件夹名,也即Test
			// ${file}:文件自身的绝对路径,也即/home/Coding/Test/.vscode/tasks.json
			// ${relativeFile}:文件在workspace中的路径,也即.vscode/tasks.json
			// ${fileBasenameNoExtension}:当前文件的文件名,不带后缀,也即tasks
			// ${fileBasename}:当前文件的文件名,tasks.json
			// ${fileDirname}:文件所在的文件夹路径,也即/home/Coding/Test/.vscode
			// ${fileExtname}:当前文件的后缀,也即.json
			// ${lineNumber}:当前文件光标所在的行号
			// ${env:PATH}:系统中的环境变量
            "args": [], 
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            // 调试器的路径
            "miDebuggerPath": "D:\\program\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            // preLaunchTask 表示在 执行调试前 要完成的任务
            // 比如这里 要完成 makeRun 这个tasks任务(重新生成程序)
            // 这里的 makeRun 是 tasks.json 中 lable 标记的任务名称
            "preLaunchTask": "makeRun",
        }
    ]
}
// 上面没有注释的部分基本都是默认生成的,可以不用更改的部分

二、再来看tasks.json文件
tasks中可以有多个任务,在一个列表中保存,根据自己需要添加或删除。

{
    "tasks": [
        {
            // 任务一: 创建 build 文件夹
            "type": "shell",
            "label": "CreateBuildDir", // lable 标记任务名称
            "command": "mkdir",  // 命令
            // 传给上面命令的参数,这里是传给 Unix 系统的参数,windows下稍有不用,下边有
            "args": [
                "-p",
                "build"
            ], 
            "windows": {
                "options": {
                    "shell": {
                        "executable": "powershell.exe"
                    }
                },
                "args": [   // 对于windows系统,传的参数
                    "-Force",
                    "build"
                ]
            },
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
        },
        // 任务二: Cmake
        // 在 build 文件夹中调用 cmake 进行项目配置
        // 如果想配置比如 release 还是 debug 可以添加参数或者在
        // CMakeLists.txt中设置也行
        {
            "type": "shell",
            "label": "cmakeRun", // 给这个任务起个名字
			// 这里的cmake,用我后面小程序创建的结果填的是全路径,
			// 命令写全路径,则路径中不能包含带空格
			// 如果你添加了环境变量,那么直接填写命令即可,也不会有
			// 路径是否包含空格的问题(下面的命令同理)
            "command": "cmake",
            "args": [
            	"-DCMAKE_MAKE_PROGRAM=E:\\Resource\\mingw64\\bin\\mingw32-make.exe", // MinGW目录下bin目录下的mingw32-make.exe
                "-G",
                // 不使用-G "Unix Makefiles" 参数可能会编译成了VS用的工程文件
                // 之所以三个斜杠,是因为vscode终端自己还要转义一次
                // 2021-01-21更新:我在32位的win7上发现,vscode自己又不转义了
                // 所以如果以下三个斜杠不行的话,大家手动改成一个斜杠就好,即\"Unix Makefiles\"
                // 后面我给的小程序默认写的是3个
                "\\\"Unix Makefiles\\\"",  
                "../"  // ../ 表示build文件夹的上级目录,CMakeLists.txt就放在上级目录中
            ],
            "options": {
                "cwd": "${workspaceFolder}/build"
            },
            "dependsOn":[
                "CreateBuildDir"  // 表示在 创建目录 任务结束后进行
            ]
        },
        // 任务三: make编译
        {
            "type": "shell",
            "label": "makeRun",
            "command": "mingw32-make",  // 这个也是MinGW目录下bin目录下的mingw32-make.exe,如果添加了环境变量,这里直接写mingw32-make.exe
            "args": [],
            "options": {
                "cwd": "${workspaceFolder}/build"
            }, // 注意这里是编译到了项目文件夹下的 build 文件夹里面,这里就解释了
            // 为什么 launch.json 中 program 路径要那么设置了。
            "dependsOn":[
                "cmakeRun"  // 表示在Cmake任务结束后进行
            ]
        },
    ],
    "version": "2.0.0"
}

配置好了,开心的写代码吧。

注意事项: 该文配置的环境是这样的,vscode打开的文件夹要是项目的根文件夹,然后调试后会在根文件夹下创建build文件夹,在这里面存放cmake和make后产生的文件,cmake使用的CMakeLists.txt(在vscode中可以安装Cmake插件,有两个,可以提示你怎么写这个文件,具体教程可以百度,基本用法很简单)要放在项目根目录下。

我个人的示例:
1.我的目录长这样,我的项目名称就是CPP(其实就是根目录的名字),然后符合注意事项的内容。
在这里插入图片描述
2.这个是我的CMakeLists.txt示例
在这里插入图片描述
3.这是我启动调试后的终端输出
在这里插入图片描述
4.多出了build文件夹
在这里插入图片描述
5.结果
在这里插入图片描述

一键创建项目(2024-01-08更新)

现在已经是2024年了,使用上述传统的模式不够方便(思路是有用的),现在vscodecmake-toos插件已经很好用了,它的功能包括:

  • 自动扫描工具链、编译器
  • 自动扫描工程的二进制配置,并且可以轻松设置启动哪一个目标
  • 可以设定调试时的可视化文件,比如qt的变量查看
  • 可以设定调试时的环境变量
  • 速度比上述传统配置快得多的多
  • 随意切换工具链
  • 等等

基于上述原因,本人写了一个基于cmake-tools的小工具,可以一键创建项目,创建完成之后,直接用vscode打开该项目的根文件夹(默认是F7编译,Ctrl + F5调试),code会自动提示你选择对应的工具链,按你的实际情况选择,如果没有,请安装对应的工具链或者扫描工具链。

在这里插入图片描述
注:上面的静态库动态库指的是BoostQt的库是动态的还是静态的意思。

工具git链接:quick-cpp 快速创建cmake工程,下载页面:下载qcpp

说明:

  • 1.本工具生成的工程使用的是clangd索引,官网这里下载,解压后请添加环境变量,并在vscode中安装clangd插件,生成器使用的是NinjaNinja下载后添加环境变量。
  • 2.请安装c++插件(新版的cpp插件好像包含了cmake-tools插件,没有的再安装一下)。
  • 3.如果您使用的是Mingw64编译器,类型也选择gnu
  • 4.如果您发现了BUG,欢迎及时提issue

CMakeLists.txt部分常用功能示例

# cmake 的版本要求
cmake_minimum_required(VERSION 3.14) 

# 项目名称
project(myCppPractice)

# 设置 Debug 模式
set(CMAKE_BUILD_TYPE "Debug")

# 设置源文件根目录,并设置别名为DIR_ROOT
aux_source_directory(. DIR_ROOT)

# 设置myCppPractice版本标准
set(CMAKE_CXX_STANDARD 14)

# 项目包含哪些 文件
add_executable(${PROJECT_NAME} main.cpp Actor.cpp AnimSpriteComponent.cpp BGSpriteComponent.cpp
Component.cpp Game.cpp Math.cpp Ship.cpp SpriteComponent.cpp)

# 添加目录下的文件,然后在add_executable中添加${DATA_SRC}
set(DATA_SRC src/Data.cpp)

# 声明三方库位置路径
set(SDL2_DIR D:/program/resource/x86_64-w64-mingw32)

# headers头文件位置-多个用空格隔开
include_directories(${SDL2_DIR}/include)

# 推荐使用find_package和find_library寻找共享库的绝对路径,再传给target_link_libraries使用。
find_library(SDL2MAIN SDL2main ${SDL2_DIR}/lib)
find_library(SDL2 SDL2 ${SDL2_DIR}/lib)
find_library(SDL2IAMGE SDL2_image ${SDL2_DIR}/lib)

# 链接库
target_link_libraries(${PROJECT_NAME} mingw32 ${SDL2MAIN} ${SDL2} ${SDL2IAMGE})
对于VS Code配置C语言和Python环境,您可以按照以下步骤进行操作: 配置C语言环境: 1. 首先,确保您的计算机已经安装了C编译器。对于Windows系统,您可以安装MinGW-w64;对于macOS系统,您可以安装Xcode Command Line Tools;对于Linux系统,您可以安装gcc。 2. 打开VS Code,点击左侧的扩展按钮(或按下Ctrl+Shift+X)打开扩展面板。 3. 在搜索框中输入"C/C++",找到Microsoft官方的C/C++扩展,并点击"安装"按钮进行安装。 4. 安装完成后,点击"启用"按钮启用该扩展。 5. 打开一个C语言项目或文件夹,并在VS Code的底部状态栏中找到"选择编译器"的选项。选择您的C编译器(如gcc或MinGW-w64)。 6. 在项目中创建一个名为`.vscode`的文件夹(如果尚未存在),然后在`.vscode`文件夹中创建一个名为`tasks.json`的文件。 7. 在`tasks.json`中,输入以下内容: ``` { "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "gcc", "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "group": { "kind": "build", "isDefault": true }, "problemMatcher": { "owner": "cpp", "fileLocation": [ "relative", "${workspaceFolder}" ], "pattern": { "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } } } ] } ``` 8. 保存并关闭`tasks.json`文件。 现在,您可以在VS Code中编写并调试C语言代码了。您可以使用快捷键Ctrl+Shift+B构建您的代码,并使用F5调试。 配置Python环境: 1. 确保您的计算机已经安装了Python解释器。您可以从Python官方网站下载并安装最新版本的Python。 2. 打开VS Code,点击左侧的扩展按钮(或按下Ctrl+Shift+X)打开扩展面板。 3. 在搜索框中输入"Python",找到Microsoft官方的Python扩展,并点击"安装"按钮进行安装。 4. 安装完成后,点击"启用"按钮启用该扩展。 5. 在VS Code的左侧活动栏中找到"Explorer"按钮,点击打开资源管理器。 6. 打开一个Python项目或文件夹,并在VS Code的底部状态栏中找到"Python环境"的选项。点击该选项,在弹出的菜单中选择您的Python解释器。 7. 现在,您可以在VS Code中编写并运行Python代码了。您可以使用快捷键Ctrl+Shift+B运行您的代码,或者使用调试功能进行调试。 希望以上步骤能帮到您!如果您有任何问题,请随时提问。
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值