目的
在Windows环境下使用makefile来编译C++,而不是在Linux系统中。虚拟机开得太烦了
准备材料
- VSCode:官网下载就OK,没什么好说的
- MinGW
MinGW配置
- 下载压缩包:
不应该直接点击Download Latest Version,不然下载下来的我也不知道怎么用….
应该进入https://sourceforge.net/projects/mingw-w64/files/,然后滑到下面,点击url
这时会得到一个名字为x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z的7z类型压缩包,这就是gcc-8.1.0,将其解压,得到包含MinGW的文件夹。 - 配置环境变量
在XX用户变量和系统变量里的Path里添加入MinGW/bin的绝对路径。
win+R后,输入cmd,打开terminal,输入g++或者gcc,如果出现以下log说明配置成功。最好重启一下1
2
3
4
5g++: fatal error: no input files
compilation terminated.
gcc: fatal error: no input files
compilation terminated.
在VSCode中编写
首先要知道各种替换变量的意思。1
2
3
4
5
6
7
8
9
10${workspaceFolder} - the path of the folder opened in VS Code
${workspaceRootFolderName} - the name of the folder opened in VS Code without any slashes (/)
${file} - the current opened file
${relativeFile} - the current opened file relative to workspaceRoot
${fileBasename} - the current opened file's basename
${fileBasenameNoExtension} - the current opened file's basename with no file extension
${fileDirname} - the current opened file's dirname
${fileExtname} - the current opened file's extension
${cwd} - the task runner's current working directory on startup
${lineNumber} - the current selected line number in the active file
tasks.json用于在launch前执行任务,launch.json用于读取执行文件
不使用第三方插件,且只编译单个cpp文件
首先创建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{ //launch.json
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe build and debug active file", //代表任务的名字
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe", //执行 经过task.json编译完后的exe文件??
"args": [],
"stopAtEntry": false, //选为true则会在打开控制台后停滞,暂时不执行程序
"cwd": "${workspaceFolder}",//当前工作路径:当前文件所在的工作空间
"environment": [],
"externalConsole": false,//是否使用外部控制台
"MIMode": "gdb",
"miDebuggerPath": "D:\\tools\\compiler\\mingw64-posix-seh\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "task g++" // must be same to the label in task.json.json
}
]
}然后点击F5,会弹出找不到task.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{ //task.json
"version": "2.0.0",
"tasks": [
{
"label": "task g++", // must be same to preLaunchTask in launch.json
"type": "shell",
"command": "g++",
"args": [
"'-Wall'",
"'-std=c++17'", //使用c++17标准编译
"'${file}'", //当前文件名
"-o", //对象名,不进行编译优化
"'${fileBasenameNoExtension}.exe'"
//g++ -Wall -std=c++17 filename.cpp -o filename.exe
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [
"$gcc"
]
}
]
}然后有一个特别关键的点!不要让task.json或者launch.json处于active状态!!!否则会报下面错误:
1
2...\.vscode\tasks.json: file format not recognized; treating as linker script
...\.vscode\tasks.json:1: syntax error上面的意思是把task.json文件当做cpp源文件来编译了,因为上面的args里面的${file}代表当前处于active状态的文件!正确的做法是下面这样:
最后直接Run就OK了~- 不使用第三方插件,且编译多个cpp文件
此时就需要学习使用makefile或者cmake了,然后把tasks的命令改成调用make等。
Reference
VScode tasks.json和launch.json的设置
Compilling C++ in visual studio code on Ubuntu
Visualstudio Code Doc: Using GCC with MinGW
各种替换变量的意思
Visual Studio Code 如何编写运行 C、C++ 程序?