VSCode+MinGW64搭建c/c++开发环境
vscode中配置c++开发环境,以及使用cmake构建项目,编写launch.json和tasks.json
VSCode+MinGW64搭建c/c++开发环境
0.说明
记录在windows操作系统下使用vscode+MinGW64搭建c++开发环境,学会使用cmake构建工程项目,以及怎样书写launch.json和tasks.json文件。
1. 准备
- vscode :https://code.visualstudio.com/
- MinGW64(用于使用gcc, g++, gdb, gfortran):https://www.mingw-w64.org/downloads/
- CMake: https://cmake.org/download/
以上可以再官网下载最新版本,也可以在我分享的蓝奏云中下载:链接:https://wwm.lanzoul.com/b03vbo7eb密码:857
2. 解压安装
2.1 CMake和MinGW64的安装
将下载的cmake和MinGW64解压,其中.7z文件也是压缩文件,如果有些压缩软件解压不开,推荐使用7-zip:https://www.7-zip.org/download.html,最后将解压好的文件放到自己想安装的位置,注意安装的路径最好不要有中文和空格,否则有时候出现很多难以预知的错误。此时还无法在系统中任意位置使用,因为没有配置好环境变量。下面配置环境变量。在win10下任意打开一个文件夹,面板左侧有此电脑,单击右键选择属性,然后在打开窗口面板右侧中选择高级系统设置,如果是win11直接在搜索框里面搜编辑环境变量,然后就跳转到这样一个界面,并且依次选择。
选择新建以后会出现一个新的条目,这时将前面安装的CMake的bin目录的绝对路径复制到这里,操作方法是打开你的bin目录,单机这个路径会变蓝然后复制即可,再粘贴到环境变量这里。然后在环境变量这里再新建一个条目,用相同的方法操作MinGW64。最后一定要一级一级的点击确定,不能直接叉掉对话框。
配置完成以后我们测试一下,同时按下键盘win+R或者在搜索处输入cmd打开命令框,输入gcc,g++,cmake如果出现下面结果,说明安装没问题,环境变量也配置成功。
2.2 VSCode安装
下载的是一个.exe文件,所以选好安装位置直接下一步即可。
安装后打开如果最左侧会看见一个工具栏,分别对应的文件,搜索,git,扩展,远程调试等,然后在扩展那里可搜素Chinese(Simplified)插件安装可以使得页面中文化,对于英文不好的同学比较友好,安装后记得重启一下,然后我们就要安装编程中用到的几个插件
- c/c++(微软的),下载量很高的那个
- CMake
- CMake tools
安装好以后重启一下。
3. 使用命令行编译运行程序
3.1 单个文件运行
VSCode的界面非常整洁,它是以文件夹为单位管理项目的,所以我们新建一个文件夹,然后在文件夹下新建一个文件,比如:”hello.cpp",然后编写代码,代码如下:
#include<iostream>
using namespace std;
int main(int argc,char **argv)
{
cout<<"hello"<<endl;
return 0;
}
但是我们会发现,和传统的visual studio不一样,他没有直接运行程序的按钮,这时候我们需要在界面上方选择终端–>新建终端,然后会发现在下面会出现一个终端窗口,其实这个终端窗口和我们前面通过cmd唤醒的窗口或者power shell是一样的,在这里也可以通过命令操作文件,网络等。然后我们在终端中输入:
g++ hello.cpp -o hello.exe
这样我们会看见在文件那里会出现一个hello.exe的文件,然后我们运行这个,通过指令
.\hello.exe
如果没有意外会看见在终端打印出程序的输出值。
可能的错误:
- 当然如果在第一步出错,请尝试查看一下你的g++是否安装成功,以及你执行这两条命令当前所在位置是和.cpp文件是否在同级下,具体可以在终端使用pwd查看。
- 写完程序记得手动保存一下(CTRL+s)
这样一来,虽然可以让程序运行,但是在这个.exe文件中是没有调试信息和警告信息的,其实我们只需要在生成可执行程序是加上-g(附带可调试信息)-Wall(附带警告信息)即可,将上面的指令变为:
g++ hello.cpp -g -Wall -o hello.exe
3.2 同一个文件夹下的多个文件编译运行
例如我们在上述例子中将输出这条语句放到一个display函数中,并且单独为这个函数写一个文件。文件结构如图所示:
像这种头文件和函数定义文件都在一个文件夹下的其实和之前的单个文件编译没有什么区别,无非是把其他的文件也写包括上,指令如下:
g++ main.cpp display.cpp -o main.exe
3.3多文件多目录分布
首先来看这样一个文件结构:
这是一个有关链表操作的程序,headers里面是定义链表和链表节点的头文件,有关他们的定义部分放在src文件夹下,main函数放在最外层,和两个文件夹在同一级目录,这里的CMakeLists.txt是后面部分使用的,这里先放着不影响。
像这种多个文件存放在多个目录下的程序结构,编译运行过程中需要注意的是我们要写好每个文件的位置,例如在该案例中,使用终端命令行编译的方法为:
g++ main.cpp src/List.cpp src/ListNode.cpp -Iheaders -o main.exe
在这条指令中,我么执行的时候可以通过cd指令切换到main.cpp的同级目录下,然后对其余两个.cpp文件要通过相对路径表明他们的位置,-I选项是用来指令头文件存放的位置,注意-I与存放头文件的headers文件夹之间直接连着,没有空格。
要想附加其他参数都是可以的,和前面没什么区别:
- -g:增加调试信息
- -Wall:输出警告信息
- -std=c++11:将c++的标准设置为c++11版本
通过这几个案例我们可以发现,使用g++命令在终端进行编译运行很简单,我们只要指明每个要编译的.cpp文件的位置,以及包含头文件的位置即可,但是存在很明显一个弊端就是每次都要写一个很长的指令,这还不包括静态链接库,动态链接库等其他的一些操作。下面记录一下使用CMake来构建工程。
4. 使用CMake构建工程:
有关CMake是什么和很多细节可以查阅官方文档,或者参考这份PDF:
https://wwm.lanzoul.com/b03vbpmle,密码:fwox
4.1 说明
CMake构建项目通常可以分为内部构建和外部构建,其区别就是:内部构建过程中生成的很多文件直接就放在放在当前目录下了,这样一来会显得很乱,所以一般都不推荐,外部构建就是我们新建一个单独的文件夹,通常起名为build,我们切入这个文件夹内再执行构建命令,这样一来生成的很多中间文件就全放在这个文件夹内,不会影响你自己写的其他代码。因此这也时比较推荐和主流的一中做法。其实就是你在哪里执行CMake指令,文件就生成在哪,为了不干扰我们自己写的,我们一般不在代码这一级目录下直接执行,而是新建一个文件夹执行。
4.2 过程
- 编写CMakeLists.txt
- 创建build文件夹并进入
- 执行CMake . . 指令
- 执行make指令
4.2.1 编写CMakeLists.txt
注意这个文件名称一点都不能错,包括大小写,只能起名为"CMakeLists.txt",
然后编写一般注意这几个参数:
- cmake_minimum_required:指定最小版本号,根据需要填写,但是不能高于你电脑安装的,可以使用
cmake --version
在终端进行查看 - project:里面填写你项目名称,随便起
- include_directories:有头文件的,把头文件路径放在这个里面
- set:设置一些变量
- add_executable:生成可执行文件
下面我们就以上面多文件多目录的那个链表程序为例,写一个CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(LIST)
include_directories(headers)
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall ")
set(SRC main.cpp src/List.cpp src/ListNode.cpp)
add_executable(main ${SRC})
将CMakeLists.txt的位置一般放在和main.cpp的同一级目录下。
4.2.2 创建build文件夹并进入
直接在终端通过指令mkdir build
创建,
使用cd build
进入。
4.2.3 执行cmake指令
与linux系统不同,在windows环境下,如果安装国visual studio,就必须使用
cmake "MinGW Makefiles" ..
执行。否则会报错,当然这个只需要在第一次使用,在没有删掉build文件夹的前提下,以后使用可以通过cmake ..
来直接操作
说明:在指令中两个点代表上一层目录,一个点代表当前目录,所以这就要保证执行的时候要把CMakeLists.txt文件和build文件夹放在同一个目录下。
4.2.4 执行make指令
如果上一步执行成功,那么已经会在build文件夹中看见Makefile文件,在windows环境下,我们需要执行mingw32-make.exe
,不出意外应该生成一个main.exe
文件,和前面的g++指令生成的功能一样。
5. 配置launch.json和tasks.json
由于前面我们不管是通过命令行还是通过cmake构建,都需要使用一些指令,那为了能有像在visual studio中一样体验,写完程序,按下F5即可运行编译这种效果,我们就要配置一下这两个文件。还是以前面链表这个程序为例子,我们先附上为这个程序编写的launch.json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++ - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}\\day04\\build\\main.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceRoot}\\day04\\",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"preLaunchTask":"mytask",
// "miDebuggerPath": "\\usrbin/gdb"
"miDebuggerPath": "E:\\MingGw64\\x86_64-8.1.0-release-win32-seh-rt_v6-rev0\\mingw64\\bin\\gdb.exe"
}
]
}
我们主要关心的有"program"
标签后面的内容,这个后面跟的路径就是你生成可调试的.exe文件,例如链表中就生成的main.exe,还有"preLaunchTask"
:这个标签说明了我们启动前要做什么,和后面tasks.json
文件中的label
标签名称相对应,要一致。最后一个是标签"miDebuggerPath"
:这个指明了你的gdb路径在哪,如果不知道可以直接在终端通过where gdb
指令进行搜索。要注意的一点是windows下的文件路径要使用双反斜线,不然会报路劲错误信息。
接下来我们看一下tasks.json文件
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "cmake",
"options": {
"cwd": "${workspaceRoot}\\day04\\build\\"
},
"command":"cmake",
"args": [
"-G \"MinGW Makefiles\"",
".."
]
},
{
"type": "shell",
"label": "make",
"options": {
"cwd": "${workspaceRoot}\\day04\\build\\"
},
"group": {
"kind": "build",
"isDefault": true
},
"command":"mingw32-make.exe",
"args": [ ]
},
{
"label": "mytask",
"dependsOrder": "sequence",
"dependsOn":[
"cmake",
"make"
]
}
]
}
首先我们要注意的是最下面label
标签和launch.json
中的preLaunchTask
标签内容要一样,这个相当于是给这个tasks任务起了一个任务代号一样,其次这个标签定义了这个他要依赖的两个标签,相当于是子任务,大任务要完成,必须让每个小任务先完成。子任务的代号分别是cmake
和make
,可以取任意名称,但必须与tasks.json文件中前面那两个子任务的label
一样。观察那两个子任务是不是很熟悉,没错,就是我们在Cmake操作中需要手动敲的,这里就相当于部署好让他启动任务的时候自动进行执行。如果上述操作都问题,那么我们下次改了程序当中内容的时候,需要重新编译输出时,只需要一个F5
就搞定了。
总结
vscode相对于visual studio来说更加的小巧,反应快,而且有着海量的插件可以使用,但同时他需要手动配置,对新手很不友好,本人最近也是在逐渐摸索,很多细节没有展开讲解,如果有什么需要探讨的可以+qq:2656363522一起商量。
更多推荐
所有评论(0)