51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

VSCode配置C++环境(Windows篇)

  1. 本地软件安装 {#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 在对应的目录中都有一些可执行程序,默认这些可执行程序是不能被全局访问的,如果想要在任意目录中访问这些目录中的可执行程序,就需要将这些目录设置到系统的环境变量中,具体设置方式如下:

  1. 找到 MinGW 和 CMake 的本地目录(以我本地为例)

    |-------------|----------------------------------------------------------------------------| | 1 2 | 1. MinGW 编译套件可执行程序对应的本地路径:C:\MinGW\bin 2. CMake 的本地路径:C:\cmake\bin |

  2. 依次右击计算机(此电脑) -> 属性 -> 高级系统设置 -> 环境变量

    查看图文演示

    用户级别的环境变量优先级大于系统级别的环境变量。 3. 根据自己的需求,找到对应的 Path, 双击,在弹出的对话框中添加第一步中找到的两个路径

    4. 验证环境变量是否配置成功了:打开一个终端 (win + r 输入 cmd

    windows 中打开终端的方式很多,在此之上列举了其中一种。

  3. vscode 插件安装 {#2-vscode-插件安装} ===============================

在 vscode 中编写 C/C++ 程序并搭建一个类似 IDE 的编译调试环境一共需要安装三个插件:C/C++, CMake, CMake Tools。首先需要基于 vscode 的扩展面板搜索插件名,找到插件之后,直接安装就可以。

  1. C/C++

  2. CMake

  3. CMake Tools

  4. 单文件编译和调试 {#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.jsontasks.json

如果生成的.vscode目录中只有launch.json没有tasks.json,是因为没有加载到工作区的源文件,需要执行如下操作:

  1. 删除生成的.vscode目录
  2. 先打开一个工作区的源文件,再重新执行添加launch.json的操作。

接下来 vscode 会自动生成调试的配置文件,并初始化。最后在需要调试的代码行前面(行号之前)用鼠标设置断点或者把光标放到某一行使用快捷键F9添加断点。

设置好断点之后,使用快捷键F5,或者通过菜单项运行 -> 启动调试就可以启动调试了,程序就会停到设置的断点位置,调试窗口中就可以显示变量信息了。如果是无断点调试可以使用快捷键Ctrl+F5

  1. 多文件编译 {#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目录

打开终端,在终端中执行以下三个命令:

  1. 进入到生成的build目录

    |-----------|--------------------| | 1 | $ cd build |

  2. 通过cmake工具基于编写的CMakeLists.txt生成MakeFile文件

    |-----------|--------------------| | 1 | $ cmake .. |

    小贴士:

    build目录也可以删了再自己创建,如果是这样操作的并且电脑上已经安装了 vs 执行这一步会出错,需要使用 (cmake -G "MinGW Makefiles" ..)来代替(cmake ..),该操作只需要做一次,后边就可以直接使用 cmake .. 了,但是没有必要脱了裤子放屁,直接使用vscode创建的 build 目录就行了。

  3. 使用make工具通过生成的makefile文件构造项目。Linux中的构建工具叫make, 32位的MinGW中的构建工具叫做mingw32-make.exe, 64位的MinGW中的构建工具叫做mingw64-make.exe, 当前使用的构建工具是32位的。最终可执行程序就生成到build目录中了。

    |-----------|----------------------------| | 1 | $ mingw32-make.exe |

Makefile快速入门

最后看一下工作区的文件列表

  1. 多文件调试 {#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.jsonpreLaunchTask配置项的值

  • 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.jsonprogram的value值。

另外 launch.jsonpreLaunchTask配置项的值也需要和 tasks.json中最后一个 label的值相同。

第一处修改: 第二处修改:

恭喜:

如果各位小伙伴已经走到这一步,那么你的vscode已经和 IDE 无异了,每次使用快捷键F5(启动调试)或者Ctrl+F5(非调试模式运行),都可以重新编译项目并生成可以调试的可执行程序,我们可以快乐的写代码了。

赞(1)
未经允许不得转载:工具盒子 » VSCode配置C++环境(Windows篇)