VSCode配置C++环境(Windows篇)
VSCode配置C++环境(Windows篇)
苏丙榅1. 本地软件安装
1.1 MinGW 编译套件
GCC官方提供的编译套件不能直接在 windows 上使用,推荐的解决方案是使用 MinGW。
MinGW 提供了一套简单方便的 Windows 下的基于 GCC 程序开发环境,并且 收集了一系列免费的 Windows 使用的头文件和库文件。它整合了 GNU 的工具集,特别是 GNU 程序开发工具,如经典
gcc
,g++
,make
等。
MinGW 是完全免费的自由软件,它在 Windows 平台上模拟了 Linux 下 GCC 的开发环境,为 C++ 的跨平台开发提供了良好基础支持,为了在 Windows 下工作的程序员熟悉 Linux 下的 C++ 工程组织提供了条件。
如果小伙伴本地安装了Qt,并且使用的编译套件也是 MingW,那么就不需要在安装了,配置一下环境变量即可。
Qt环境变量配置如果本地没有,那就必须老老实实的下载一个了,下载地址如下:
MinGW官方下载地址: https://osdn.net/projects/mingw/
第一步, 运行下载到本地的 MinGW 下载器,准备编译套件的下载。
第二步: 给即将下载的编译套件指定存储路径
第三步: 下载前的准备。
第四步: 开始下载,将下图中的两项标记为下载,
勾选完成后,在菜单栏中选择Installation -> Apply Changes
:
弹出如下对话框,选择Apply
。然后耐心等待,直至安装成功,即可关闭此界面。注意,整个安装过程中可能会提示某些组件下载失败,先关闭提示对话框,等下载完成之后, 按照最后一步处理一下即可。
最后一步,如果安装过程中某个包下载失败了可进程如下操作:
在菜单栏中选择
Installation -> Apply Changes
,再次进行安装就可以了。可以通过
MinGW Installation Manager
安装界面中的All Packages
选项查看没有安装成功的软件包。
1.2 CMake
CMake是一个跨平台的项目构建工具,它可以用简单的语句来描述所有平台的编译过程并输出各种各样的makefile或者project文件
(如 Linux 的 Makefile 或 Windows Visual C++ 的 projects/workspaces)。最后调用编译器按照构建文件规则编译整个项目。
。现在越来越多的开源项目都支持使用 CMake 进行项目构建,如果想要在 VSCode 搭建的C++开发环境中实现类似IDE的一键编译或者一键调试的效果,就可以依赖 CMake 来解决这个问题。
CMake 官方下载地址: https://cmake.org/download/
根据自己本地操作系统选择对应的版本,将绿色版 CMake 下载到本地,并解压缩到自己认为合适的目录中即可。
1.3 设置环境变量
不论是使用 MinGW 下载器下载到本地的编译套件,还是下载到本地的绿色版的 CMake 在对应的目录中都有一些可执行程序,默认这些可执行程序是不能被全局访问的,如果想要在任意目录中访问这些目录中的可执行程序,就需要将这些目录设置到系统的环境变量中,具体设置方式如下:
找到 MinGW 和 CMake 的本地目录(以我本地为例)
1
21. MinGW 编译套件可执行程序对应的本地路径:C:\MinGW\bin
2. CMake 的本地路径:C:\cmake\bin依次
查看图文演示右击计算机(此电脑) -> 属性 -> 高级系统设置 -> 环境变量
,用户级别的环境变量优先级大于系统级别的环境变量。
根据自己的需求,找到对应的
Path
, 双击,在弹出的对话框中添加
第一步中找到的两个路径
:验证环境变量是否配置成功了:打开一个终端 (
win + r
输入cmd
)windows 中打开终端的方式很多,在此之上列举了其中一种。
2. vscode 插件安装
在 vscode 中编写 C/C++ 程序并搭建一个类似 IDE 的编译调试环境一共需要安装三个插件:C/C++
, CMake
, CMake Tools
。首先需要基于 vscode 的扩展面板搜索插件名,找到插件之后,直接安装就可以。
C/C++
CMake
CMake Tools
3. 单文件编译和调试
vscode 下单文件的编译调试只需要在本地部署好编译套件,并安装 C/C++
插件就可以使用了,使用方法如下:
3.1 编译
vscode可以以目录为单位处理文件,因此我们首先创建一个目录,然后用vscode打开这个目录,在这个目录对应的工作区添加一个源文件,编写程序:
代码编写完毕之后,找到菜单栏的终端 ->新终端
打开一个新的终端窗口,这个终端窗口就是Windows自带的 power shell,支持Linux 命令。
在得到的 Power Shell
窗口中使用 gcc 编译源文件:
1 | 编译c源文件 |
这样在打开的工作区目录中就生成了一个叫做 app.exe
的可执行程序。
3.2 调试
vscode的工具栏面板中有一个调试按钮,点击这个按钮,然后根据提示,将launch.json
文件创建出来,这个文件中记录了一些用于调试的配置信息。(可以按照下图来操作也可以点按钮 运行和调试
)
在窗口顶部弹出的窗口中选择C++(GDB/LLDB)
选择编译器,因为在我本地有两个版本的 MinGW 编译套件,所有有两个选项,小伙伴根据自己配置的路径选择对应的编译套件中的编译器即可。如果源文件是.cpp, 此处显示的是 g++.exe ...................
。
如果vscode 加载不到编译器,会弹出如下窗口,需要选择 MinGW 套件中的 GCC 编译器
,不要选 VS里边的编译器。
如果操作成功了,最后会看到生成了一个叫做 .vscode
的目录, 并且里边有两个文件launch.json
和tasks.json
如果生成的.vscode
目录中只有launch.json
没有tasks.json
,是因为没有加载到工作区的源文件,需要执行如下操作:
- 删除生成的
.vscode
目录 - 先打开一个工作区的源文件,再重新执行添加
launch.json
的操作。
接下来 vscode 会自动生成调试的配置文件,并初始化。最后在需要调试的代码行前面(行号之前)用鼠标设置断点或者把光标放到某一行使用快捷键F9
添加断点。
设置好断点之后,使用快捷键F5
,或者通过菜单项运行 -> 启动调试
就可以启动调试了,程序就会停到设置的断点位置,调试窗口中就可以显示变量信息了。如果是无断点调试可以使用快捷键Ctrl+F5
。
4. 多文件编译
如果一个项目中有多个源文件,进行项目编译有两种方式:通过命令编译
, 通过CMake编译
,后者是全自动化也不需要 gcc 基础,推荐使用。为了更贴近实际项目场景, 下面演示一个多目录场景的案例, 目录结构如下:
4.1 基于命令编译项目
首先打开一个终端(现有终端或者新的终端都可以),在 sort目录
执行如下命令编译源文件
1 | C++程序编译 |
这样就生成了可执行程序 sort.exe
。
4.2 基于CMake编译
首先在源文件所在的工作区目录中添加一个CMake文件叫做 CMakeLists.txt
,在这个文件中添加两句话
1 | project(SortMake) |
project()
:设置项目名称,参数可以随意指定aux_source_directory(dir VAR)
: 搜索dir
目录下所有的源文件,并将结果列表存储在变量VAR
中add_executable(target src)
: 指定使用源文件src
,生成可执行程序target
,${变量名}
是取变量的值include_directories(headDir)
: 设置包含的头文件目录
在vscode中先配置cmake, 按快捷键 ctrl+shift+p
,在窗口中搜索 CMake configure
,选中这个配置项
如果vscode 加载不到编译器,会弹出如下窗口,需要选择 MinGW 套件中的 GCC 编译器
,不要选 VS里边的编译器。
CMake 配置完成之后, 会在vscode 工作区生成一个 build
目录
打开终端,在终端中执行以下三个命令:
进入到生成的
build
目录1
cd build
通过
cmake
工具基于编写的CMakeLists.txt
生成MakeFile
文件1
cmake ..
小贴士:
build
目录也可以删了再自己创建,如果是这样操作的并且电脑上已经安装了 vs 执行这一步会出错,需要使用 (cmake -G “MinGW Makefiles” ..)来代替(cmake ..),该操作只需要做一次,后边就可以直接使用cmake ..
了,但是没有必要脱了裤子放屁,直接使用vscode创建的 build 目录就行了。使用
make
工具通过生成的makefile
文件构造项目。Linux中的构建工具叫make
, 32位的MinGW中的构建工具叫做mingw32-make.exe
, 64位的MinGW中的构建工具叫做mingw64-make.exe
, 当前使用的构建工具是32位的。最终可执行程序就生成到build
目录中了。1
mingw32-make.exe
最后看一下工作区的文件列表
5. 多文件调试
5.1 生成调试配置文件
不通过CMake进行可执行程序调试也是可以的,比较麻烦,还需要通过命令重新生成可用于调试的可执行程序,再修改配置文件,步骤比较繁琐,这里讲一下如何基于CMake进行配置并调试。
第一步: 先将
launch.json
文件创建出来(一定要先切换到显示项目源文件的那个 Tab 页,不然 tasks.json创建不出来
)。
第二步: 在窗口顶部弹出的窗口中选择
C++(GDB/LLDB)
选择g++
编译器,因为在我本地有两个 MingW
环境,所以有两个 g++.exe 选项(选择哪个都行)
多文件项目还不能自动链接并编译项目, 需要手动修改配置文件, 因此会弹出这个对话框:
5.2 launch.json
1 | { |
这个配置文件中需要修改的项不太多, 介绍一下需要修改的配置项:
program
: 要调试的可执行程序的路径,里边可以使用一些宏,宏的外部加${}
表示取值${fileDirname}
:文件目录的名字,launch.json
对应的目录名就是.vscode
${fileBasenameNoExtension}
:不带扩展名的文件名,文件名是main函数对应的那个文件${workspaceFolder}
:工作区目录
preLaunchTask
:调试项目前要执行的任务,C/C++: g++.exe 生成活动文件
是tasks.json
中的一个任务- 通过执行这个任务生成了
program
对应的可执行文件
- 通过执行这个任务生成了
5.3 tasks.json
我们需要将原来 tasks.json中的内容清楚,使用下面的模板进行替换:
1 | { |
下面解释一下文件中需要修改的一些设置项:
cwd
:进入到工作区的子目录build
中1
2
3"options": {
"cwd": "${workspaceFolder}/build/"
},label
: 标题, 可随意取名, 这里叫做cmake
command
: 要执行的命令是cmake ..
, 作用是使用 cmake 生成makefile
文件1
2
3
4
5
6
7
8{
"label": "cmake",
"type": "shell",
"command": "cmake",
"args": [
".."
]
}label
: 标题, 可随意取名, 这里叫做make
command
: 要执行的命令是mingw32-make.exe
作用是使用 MinGW 编译套件中的这个工具基于makefile
构建当前项目1
2
3
4
5
6
7
8
9
10{
"label": "make",
"group":{
"kind":"build",
"isDefault":true
},
"command": "mingw32-make.exe",
"args":[
]
}label
: 标题, 可以随意取名, 这里叫Build my project
。该名字需要作为launch.json
中preLaunchTask
配置项的值dependsOn
: 需要执行的命令对应的label
1
2
3
4
5
6
7{
"label":"Build my project",
"dependsOn":[
"cmake",
"make"
]
}
5.4 修改配置文件
根据对 tasks.json
的解释, 可以知道最终使用MinGW
的构建工具mingw32-make.exe
通过 cmake
生成的makefile
编译整个项目得到的可执行程序存储到了工作区的build
目录中,因此需要修改launch.json
的program
的value值。
另外 launch.json
中 preLaunchTask
配置项的值也需要和 tasks.json
中最后一个 label
的值相同。
第一处修改:
第二处修改:
恭喜:
如果各位小伙伴已经走到这一步,那么你的vscode
已经和 IDE 无异了,每次使用快捷键F5(启动调试)
或者Ctrl+F5(非调试模式运行)
,都可以重新编译项目并生成可以调试的可执行程序,我们可以快乐的写代码了。