将下载好的文件分别添加到环境变量中
分别输入下列命令查看环境变量是否配置成功
gcc --version
g++ --version
cmake --version
VSCode是以文件夹为项目单位,例如在demo文件夹下创建一个 main.cpp
程序文件,程序代码如下:
#include
using namespace std;
int main() {
for (int i = 0; i < 5; ++i) {
cout << "hello world" << endl;
}
return 0;
}
使用 g++
命令编译 mian.cpp
, g++ main.cpp -o main
,会在 demo 目录下生成一个名为 mian.exe
的可执行文件;
运行 mian.exe 可执行文件;
每次输入命令来编译然后运行程序的方法比较繁琐,也可以如下图所示操作;
生成的 tasks.json 文件内容如下,对该配置文件中的一些字段简单的介绍;
tasks.json 文件中的内容是用来构建程序时进行一系列的操作的描述;
command
是运行 cpp 程序文件的命令;
args
是一个数组形式,指定将传递给 g++ 的命令行参数,这些参数必须按照编译器期望的顺序指定,即数组中参数出现的顺序;其中 ${file}
表示当前打开的文件; ****${fileBasename}
表示当前打开的文件名;${fileBasenameNoExtension}
表示当前打开文件的不带后缀的文件名;${fileDirname}
表示当前打开文件的目录名;
当点击运行按钮时,将读取tasks.json
以了解如何构建和运行你的程序;
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "D:\\Application\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
g++ main.cpp -o main
命令生成的是一个可执行文件,不能进行调试;命令 g++ -g mian.cpp -o main_debug
可以生成具有调试信息的可执行文件,即可以进行调试,选项 -g 表示具有调试功能;通过查看文件大小可以知道带有调试信息的文件大小更大。
借助VSCode进行程序调试
#ifndef SWAP_H
#define SWAP_H
void swap(int &a, int &b);
#endif
swap.cpp
#include "swap.h"
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
main.cpp
#include
#include "swap.h"
using namespace std;
int main() {
int a = 10, b = 20;
cout << "before swap: a = " << a << ", b = " << b << endl;
swap(a, b);
cout << "after swap: a = " << a << ", b = " << b << endl;
return 0;
}
使用g++ 命令编译多文件,g++ main.cpp swap.cpp -o main
当程序文件的数量变多时,使用命令行编译文件将会变得非常低效,接下来介绍使用cmake进行多文件的编译运行和调试;
首先在项目的根目录下创建一个名为 CMakeLists.txt
的文件,然后在 CmakeLists.txt 文件中输入下面内容,构建一个简单 CMake 工程;
cmake_minimum_required(VERSION 3.17) # cmake项目要求的cmake的最低版本
project(demo02) # 项目名为 demo02
set(CMAKE_CXX_STANDARD 17) # c++标准
add_executable(main main.cpp swap.h swap.cpp) # 编译链接的文件名,第一个为最终生成的可执行文件名(不带后缀),后面为待编译链接的文件名,用空格隔开;
在VSCode中配置Cmake项目
上述构建cmake项目,并通过cmake编译链接cpp程序文件的方法是通过命令行的方式进行的,这样是比较繁琐的,也没能充分利用VSCode插件的便利性。我们肯定是希望只需要在CMakeLists.txt文件中进行简单的修改,然后通过VSCode点击几个简单的按钮就能重新编译链接程序,因此接下来进行相关配置。
配置 tasks.json 文件
tasks.json
文件可以配置为运行脚本和启动进程,以便可以在 VS Code 中使用其中许多现有工具,而无需输入命令行或编写新代码。
options
覆盖cwd
(当前工作目录)、env
(环境变量)或shell
(默认 shell)的默认值。选项可以按任务设置,也可以全局或按平台设置。
cwd
表示启动VSCode时任务运行器的当前工作目录;
tasks
表示命令行执行的任务,可以是多个任务的组合;
label
用户定义任务的标签,根据标签值确定执行哪个任务;
dependsOn
将更简单的任务组合成任务。
{
"options": {
"cwd": "${workspaceFolder}/build"
},
"tasks": [
{
"type":"shell",
"label": "cmake",
"command": "cmake",
"args": [
".."
]
},
{
"label": "make",
"group": {
"kind": "build",
"isDefault": true
},
"command": "mingw32-make.exe",
"args": [
]
},
{
"label": "Build",
"dependsOn":[
"cmake",
"make"
]
}
],
"version": "2.0.0"
}
配置 launch.json 文件
launch.json
配置文件,顾名思义,启动程序时读取的配置文件;
program
指定要调试的程序;
args
运行调试程序时传递给程序的参数数组;
miDebuggerPath
运行调试程序的命令;
preLaunchTask
顾名思义,在执行launch.json文件中的命令时先执行的 task,即 tasks.json 文件中配置的 task,这里为 tasks.json 中 label 值为 Build 的 task。而 label 值为 Build 的 task 又是 label 为 cmake 和 make 的组合 task,即在执行 launch.json 中命令之前,先执行 cmake 和 make 命令。
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "C/C++: g++.exe build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/main.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "D:\\Application\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "Build"
}
]
}
在完成上述的配置后,即可使用快捷 ctrl+F5 编译运行程序,或快捷键 F5 调试程序;