3、windows环境下vscode开发c/c++环境配置(二)

前言:上一篇文章写了windows环境下,配置vscode的c/c++开发环境,这一篇讲vscode开发c/c++的配置文件,包括c_cpp_propertues.json,task.json及launch.json。

一、总体流程

通过c/c++插件我们就可以来编写c/c++程序了,但是这仅仅是可以编辑c/c++程序,将c/c++程序编译成机器可以识别的语言还需要配合mingw或者其他编译器来执行,mingw编译器配置可以参考笔者上一篇文章。同时我们还想在编辑c/c++程序的时候能有智能提示,比如一些关键字不用写出全名就可以提示进行选择,这里就需要通过一些配置文件告诉本机系统,这个配置文件就是c_cpp_propertues.json。

配置好c_cpp_propertues.json文件后,我们就可以开心的编写我们的c/c++程序里,而且会有一些智能提示,包括一些引用的头文件也不会无故报错标红了。编写好的程序需要被编译才可以运行在机器上面,这里就需要第二个配置文件task.json。task.json功能是用来builde(构建或编译)编写好的程序的。

其实前两步就可以让程序跑起来了,但是我们开发中少不了要调试程序,那就需要第三个配置文件了--launch.json。

官网对这三个文件的定位如下。

二、c_cpp_propertues.json

第一次编辑好程序后保存一般头文件下面会有红色波浪线,这就是vscode编辑器不知道这个东西是什么,所以我们就需要将这个东西所在的位置告诉vscode,复制这个告知工作的就是c_cpp_propertues.json配置文件,他的主要功能就是告诉编辑器头文件路径及一些关键字的智能提示等。

回到 Untitled-1.c 界面,按下 F1 或者按下 Ctrl+Shift+P 调出面板,输入C/C++ ,选择编辑配置(UI),如下图示。注意,编辑器会提示先选择一个文件夹,方便后面编写的程序都可以使用配置文件。

此时,vscode 界面左上角的 SHENZHEN 文件夹下会出现一个**.vscode 文件夹**,如下图示。

在 C/C++ 配置界面下的编译器路径 ,选择适合自己的,如果是 C 语言 ,则选择 gccC++ 则选择 g++ ,编译器路径是之前存放 mingw 的路径,如果当前显示的不是,则需要修改成之前存放 mingw 的路径,如下图示。

在当前界面下,将 IntelliSense 模式 ,设置成 windows-gcc-x64,将 C 标准设置为 c11 , C++ 标准设置为 c++17,如下图示。(这里设置可以根据自己实际情况)

此时,c_cpp_properties.json 文件内容如下:

三、task.json

程序写好后就需要编译了,tasks.json文件来告诉VS Code如何构建(编译)程序,可以代你执行类似于在命令行输入 *" **gcc hello.c -o hello"***命令的操作,你只要在图形界面下操作即可生成可执行文件。

回到 Untitled-1.cpp 界面,按下 F1 或者按下 Ctrl+Shift+P 调出面板,输入tasks ,选择任务:配置默认生成任务 ,然后选择 C/C++:g++.exe 生成活动文件,如下图示。

此时 .vscode 文件夹中多出一个 tasks.json 文件,如下图示。

tasks.json 文件内容如上。

四、launch.json

配置好编译(构建)文件后,就可以调试运行了。launch.json 是用于运行 ( run ) 和调试 ( debug ) 的配置文件,可以指定语言环境,指定调试类型等等内容。

回到 Untitled-1.cpp 界面,按下 F1 或者按下 Ctrl+Shift+P 调出面板,输入debug ,选择调试:开始调试 ,然后再选择C++ (GDB/LLDB),如下图示

点击 vscode 左上角运行下的创建 launch.json 文件 ,然后再选择C++ (GDB/LLDB ) ,如下图示。

此时,生成了一个launch.json 文件,如下图示。

五、补充

c_cpp_properties.json、tasks.json、launch.json三个文件一经配置,可以在多个项目中都是用,直接复制他们所在的.vscode文件夹就可以。这里笔者将常用的三个文件的配置信息贴出,大家可以根据自己情况修改配置内容。

c_cpp_properties.json

XML 复制代码
{
    "configurations": [
        {
            "name": "Linux",        //配置名称,默认为系统名,可以自行更改
            "includePath": [        //(常用)运行项目包含.h头文件的目录,
                "${workspaceFolder}/**"//此处会匹配工作文件下的所有文件
            ],                      //添加"compilerPath"后,系统include路径可不写明
            "defines": [],        //(常用)定义一些需要的变量,等价于在编译时写"-D变量" 
            "compilerPath": "/usr/bin/gcc",     //编译器的路径
            "cStandard": "gnu17",               //C标准的版本
            "cppStandard": "gnu++14",           //C++标准的版本
            "intelliSenseMode": "gcc-x64"       //IntelliSense的一些配置,默认即可
        }
    ],
    "version": 4
}

tasks.json

XML 复制代码
{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",        //任务类型(如果是shell,下面的command就相当于执行shell命令)
            "label": "环境配置测试",     //任务的名称,可以修改,但一定要和launch中的"preLaunchTask"项保持一致
            "command": "/usr/bin/gcc", //编译器(可执行文件)的路径
            "args": [                  //(常用)编译时使用的参数,和命令行下相同
                "-g",
                "${fileDirname}/hello.c",
                "-o",
                "${fileDirname}/hello"
            ],
            //上述内容相当于在命令行下输入了: gcc hello.c -o hello
            "options": {
                "cwd": "/usr/bin"     //编译器的目录
            },
            "problemMatcher": [
                "$gcc"                //使用gcc捕捉错误
            ],
            "group": "build",
            "detail": "compiler: /usr/bin/gcc"      //一些描述性信息
        }
    ]
}

launch.json

XML 复制代码
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "运行和调试",         //运行和调试任务的名称,可自定义
            "type": "cppdbg",            //配置类型,默认即可
            "request": "launch",         //launch模式允许我们打断点进行调试,默认即可
            "program": "${fileDirname}/hello", //(常用)程序目录,这里相当于在命令行执行"hello"
            "args": [],                  //(常用)程序(main函数)的入口参数
            "stopAtEntry": false,       //在入口处暂停,选true相当于在入口处增加断点
            "cwd": "${workspaceFolder}",//当前的文件目录
            "environment": [],          //添加到程序的环境变量
            "externalConsole": false,   //外部控制台,true在调试时会开启系统控制台窗口,false会使用vscode自带的调试控制台
            "MIMode": "gdb",            //使用gdb进行调试
            "setupCommands": [           //用来设置gdb的参数,默认即可
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "环境配置测试",    //(常用)运行和调试前要执行的task(编译)任务,任务名要和task.json里的"label"对应
            "miDebuggerPath": "/usr/bin/gdb"  //debug调试工具的路径,这里使用gdb所在的路径
        }
    ]
}

六、参考文献

从零开始的vscode安装及环境配置教程(C/C++)(Windows系统)_vscode搭建编译器环境-CSDN博客

launch.json / tasks.json / c_cpp_properties.json 解析 配置文件 C++ VSCode - HarryPotterIsDead! - 博客园 (cnblogs.com)

一键搞定 VSCode 下的 C/C++基本开发环境配置 - 知乎 (zhihu.com)

VS Code上C++的环境配置&tasks.json和launch.json解析 - 知乎 (zhihu.com)

相关推荐
陈 洪 伟15 分钟前
C++单例模式代码实现与分析
c++·单例模式
小乌龟不会飞15 分钟前
【C++】【网络】【Linux系统编程】单例模式,加锁封装TCP/IP协议套接字
网络·c++·网络协议·tcp/ip·linux系统编程
Daking-35 分钟前
「队列」实现优先队列(priority_queue)的功能 / 手撕数据结构(C++)
开发语言·数据结构·c++
jimte_pro42 分钟前
Linux系统接口--信号量、互斥锁、原子操作和自旋锁的区别
linux·c语言·驱动开发
FHKHH1 小时前
计算机网络第二章:作业 2: UDP ping 程序
运维·服务器·vscode·计算机网络·ubuntu·udp
xiaobai12 32 小时前
集群聊天服务器项目【C++】(五)网络模块和业务模块
服务器·网络·c++
weixin_456732592 小时前
内核是如何发送数据包
linux·网络·c++
熙曦Sakura3 小时前
【C++】C++入门概念(二)
开发语言·c++
冷白白4 小时前
【C++】C++对C的扩展
c语言·c++·算法
DdddJMs__1354 小时前
C语言 | Leetcode C语言题解之第415题字符串相加
c语言·leetcode·题解