- 本地软件安装 {#1-本地软件安装} =====================
1.1 MinGW 编译套件 {#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 {#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 设置环境变量 {#1-3-设置环境变量}
不论是使用 MinGW 下载器下载到本地的编译套件,还是下载到本地的绿色版的 CMake 在对应的目录中都有一些可执行程序,默认这些可执行程序是不能被全局访问的,如果想要在任意目录中访问这些目录中的可执行程序,就需要将这些目录设置到系统的环境变量中,具体设置方式如下:
-
找到 MinGW 和 CMake 的本地目录(以我本地为例)
|-------------|----------------------------------------------------------------------------| |
1 2
|1. MinGW 编译套件可执行程序对应的本地路径:C:\MinGW\bin 2. CMake 的本地路径:C:\cmake\bin
| -
依次
右击计算机(此电脑) -> 属性 -> 高级系统设置 -> 环境变量
,用户级别的环境变量优先级大于系统级别的环境变量。 3. 根据自己的需求,找到对应的
Path
, 双击,在弹出的对话框中添加
第一步中找到的两个路径
:4. 验证环境变量是否配置成功了:打开一个终端 (
win + r
输入cmd
)windows 中打开终端的方式很多,在此之上列举了其中一种。
-
vscode 插件安装 {#2-vscode-插件安装} ===============================
在 vscode 中编写 C/C++ 程序并搭建一个类似 IDE 的编译调试环境一共需要安装三个插件:C/C++
, CMake
, CMake Tools
。首先需要基于 vscode 的扩展面板搜索插件名,找到插件之后,直接安装就可以。
-
C/C++
-
CMake
-
CMake Tools
-
单文件编译和调试 {#3-单文件编译和调试} =========================
vscode 下单文件的编译调试只需要在本地部署好编译套件,并安装 C/C++
插件就可以使用了,使用方法如下:
3.1 编译 {#3-1-编译}
vscode可以以目录为单位处理文件,因此我们首先创建一个目录,然后用vscode打开这个目录,在这个目录对应的工作区添加一个源文件,编写程序:
代码编写完毕之后,找到菜单栏的终端 ->新终端
打开一个新的终端窗口,这个终端窗口就是Windows自带的 power shell,支持Linux 命令。
在得到的 Power Shell
窗口中使用 gcc 编译源文件:
轻松搞定GCC
|-------------------|---------------------------------------------------------------------------|
| 1 2 3 4 5
| # 编译c源文件 $ gcc xxx.c -o 可执行程序名 # 编译C++源文件 $ g++ xxx.cpp -o 可执行程序名
|
这样在打开的工作区目录中就生成了一个叫做 app.exe
的可执行程序。
3.2 调试 {#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 基于命令编译项目 {#4-1-基于命令编译项目}
首先打开一个终端(现有终端或者新的终端都可以),在 sort目录
执行如下命令编译源文件
|-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4
| # C++程序编译 $ g++ src/insert.cpp src/select.cpp test.cpp -o sort -I ./include # 编译 src 目录下所有的 .cpp 文件 $ g++ src/*.cpp test.cpp -o sort -I ./include
|
这样就生成了可执行程序 sort.exe
。
4.2 基于CMake编译 {#4-2-基于CMake编译}
首先在源文件所在的工作区目录中添加一个CMake文件叫做 CMakeLists.txt
,在这个文件中添加两句话
|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5
| project(SortMake) aux_source_directory(src SRC_SUB) aux_source_directory(. SRC_CUR) add_executable(sort ${SRC_SUB} ${SRC_CUR}) include_directories(include)
|
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 生成调试配置文件 {#5-1-生成调试配置文件}
不通过CMake进行可执行程序调试也是可以的,比较麻烦,还需要通过命令重新生成可用于调试的可执行程序,再修改配置文件,步骤比较繁琐,这里讲一下如何基于CMake进行配置并调试。
第一步: 先将
launch.json
文件创建出来(一定要先切换到显示项目源文件的那个 Tab 页,不然 tasks.json创建不出来
)。 第二步: 在窗口顶部弹出的窗口中选择C++(GDB/LLDB)
选择g++
编译器,因为在我本地有两个 MingW
环境,所以有两个 g++.exe 选项(选择哪个都行)
多文件项目还不能自动链接并编译项目, 需要手动修改配置文件, 因此会弹出这个对话框:
5.2 launch.json {#5-2-launch-json}
|---------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| { // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "g++.exe - 生成和调试活动文件", "type": "cppdbg", "request": "launch", "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "C:\\Qt\\Qt5.9.3\\Tools\\mingw530_32\\bin", "environment": [], "console": "externalTerminal", "MIMode": "gdb", "miDebuggerPath": "C:\\Qt\\Qt5.9.3\\Tools\\mingw530_32\\bin\\gdb.exe", "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "C/C++: g++.exe 生成活动文件" } ] }
|
这个配置文件中需要修改的项不太多, 介绍一下需要修改的配置项:
program
: 要调试的可执行程序的路径,里边可以使用一些宏,宏的外部加${}
表示取值${fileDirname}
:文件目录的名字,launch.json
对应的目录名就是.vscode
${fileBasenameNoExtension}
:不带扩展名的文件名,文件名是main函数对应的那个文件${workspaceFolder}
:工作区目录
preLaunchTask
:调试项目前要执行的任务,C/C++: g++.exe 生成活动文件
是tasks.json
中的一个任务- 通过执行这个任务生成了
program
对应的可执行文件
- 通过执行这个任务生成了
5.3 tasks.json {#5-3-tasks-json}
我们需要将原来 tasks.json中的内容清楚,使用下面的模板进行替换:
|------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| { "version": "2.0.0", "options": { "cwd": "${workspaceFolder}/build/" }, "tasks": [ { "label": "cmake", "type": "shell", "command": "cmake", "args": [ ".." ] }, { "label": "make", "group":{ "kind":"build", "isDefault":true }, "command": "mingw32-make.exe", "args":[ ] }, { "label":"Build my project", "dependsOn":[ "cmake", "make" ] } ] }
|
下面解释一下文件中需要修改的一些设置项:
-
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 修改配置文件 {#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(非调试模式运行)
,都可以重新编译项目并生成可以调试的可执行程序,我们可以快乐的写代码了。