这里假定你已经配置好基础的vscode c++环境
json介绍
这里其实主要配置的3种json, vscode其实就是通过launch.json和tasks.json来自动生成指令的
- launch.json
- tasks.json
- c_cpp_properties.json
配置freeglut
-
下载地址:https://www.transmissionzero.co.uk/software/freeglut-devel/
-
注意选择mingw
- 下载完毕选择一个地方安装解压即可
修改task.json
- 这里主要通过command后面的指令+args中的参数组成一整个命令行语句然后调用
- 此外,通过dependsOn 来构成task之间的依赖
创建编译任务 compile
- 这里command为你的g++.exe的路径,若你将g++的目录添加到了环境变量中,则可以直接使用g++
- 而args就是各个编译参数:
- 可参考代码如下
{
"type": "cppbuild",
"label": "glut compile",
"command": "E:/MinGW/bin/g++.exe",
"args": [
"-IE:\\CPP\\OpenGL\\freeglut-MinGW-3.0.0-1.mp\\freeglut\\include",
"-fdiagnostics-color=always",
"-g3",
"-c",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.o",
"--std",
"c++17",
],
"options": {
"cwd": "E:/MinGW/bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
},
创建连接任务 link
- 类似编译,这里同样command为g++,只是args变成链接的参数了,具体为g++ x.o -o y.exe,将x.o链接生成y.exe
- 那这里既然要链接,就要引入库目录,对应lib目录,指令:-L<lib_path>, 同时要引入库, 指令: -l<lib_name>, 这里lib_name注意不要前面的lib
- 同时这里本人踩了大坑,g++编译时, -l<lib_name> 必须要放在源文件后面,推荐直接放最后面,不然它还是链接不上
- 同时你链接需要.o,所以该task, “dependsOn”: [“glut compile”] (上一节的名字)
- 可参考代码如下:
{
"type": "process",
"label": "glut link",
"command": "E:/MinGW/bin/g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g3",
"${fileDirname}\\${fileBasenameNoExtension}.o",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"--std",
"c++17",
"-LE:\\CPP\\OpenGL\\freeglut-MinGW-3.0.0-1.mp\\freeglut\\lib\\",
"-lopengl32", "-lglu32", "-lfreeglut",
],
"options": {
"cwd": "E:/MinGW/bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。",
"dependsOn": ["glut compile"]
},
创建移动lib任务 setup
- 最后要将dll移动到你生成exe的目录下
- 这里我们使用xcopy指令,注意command
- 同时"dependsOn": [“glut link”]
- 参考代码如下:
{
"type": "process",
"label": "glut setup",
"command": "xcopy",
"args": [
"/y",
"/d",
"E:\\CPP\\OpenGL\\freeglut-MinGW-3.0.0-1.mp\\freeglut\\bin\\freeglut.dll",
"${fileDirname}\\"
],
"options": {
"cwd": "E:/MinGW/bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。",
"dependsOn": ["glut link"]
},
修改launch.json
- 最后在launch.json 添加我们的启动json即可
- 启动的程序为cmd.exe
- 然后args, 通过cmd调用我们生成的exe,并最后pause
- 通过 “preLaunchTask”: “glut setup” 来调用我们的task链条
- 参考代码:
{
"name": "C/C++ glut",
"type": "cppdbg",
"request": "launch",
"stopAtEntry": false,
"externalConsole": true,
"cwd": "e:/CPP/testVsCode",
"program": "C:\\Windows\\System32\\cmd.exe",
"args":[
"/C",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"&",
"pause"],
"MIMode": "gdb",
"miDebuggerPath": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "glut setup"
}
- 最后找到对应位置即可编译生成啦
补充
- vscode运行c++时,若想运行在独立控制窗口,那么为了避免窗口瞬间关闭看不到输出,可以使用cmd来调用程序,但是这样会命中不了断点。若想命中断点,且能看到输出,要不用内置控制台,要不在代码末尾补个getchar()