行业知识
vscode 配置opengl (glut), lib链接可参考
2026-11-12 18:11:43
来源:互联网转载
这里假定你已经配置好基础的vscode c++环境
json介绍
这���其实主要配置的3种json, vscode其实就是通过launch.json和tasks.json来自动生成指令的
- launch.json
这个用于启动程序用的,但是由于其可以指定preLaunchTask-即在启动之前需要做什么事情,所以这里用来启动编译-链接到最后启动程序等一系列过程
我们可以看到图中左上角,每一个启动方式(c/c++ Runner:Debug Session和c/c++ glut)其实都对应"configurations"数组中的一个json的name属性
而在这里,我们启动了cmd(program),让cmd去调用我们生成好的程序(args),并且调用完成后再调用pause指令,我们通过preLaunchTask所指向的task完成程序的编译等操作
- tasks.json
本json中就存放了各种task,每个task都对应一个json,而preLaunchTask就是通过这里每个json的label属性来找是哪个task,这里我们就让task去做3件事情:1.编译,2.链接,3.复制dll
- c_cpp_properties.json
这个json和程序生成与运行无关,他是用来配置intellisense,这个配置错了,你写代码会有报错,但是编译和生成这些还是正常的,一般就需要注意一下standard和includePath就行
配置freeglut
-
下载地址:https://www.transmissionzero.co.uk/software/freeglut-devel/
-
注意选择mingw
- 下载完毕选择一个地方安装解压即可
其中
bin中的dll是运行时需要的
include是编译时需要的,包含目录
lib是连接是需要的,库目录
修改task.json
- 这里主要通过command后面的指令+args中的参数组成一整个命令行语句然后调用
- 此外,通过dependsOn 来构成task之间的依赖
创建编译任务 compile
- 这里command为你的g++.exe的路径,若你将g++的目录添加到了环境变量中,则可以直接使用g++
- 而args就是各个编译参数:
-I引入包含文件夹,用于编译
-c 指定编译源文件,-o 指定输出的文件,这里生成中间文件.o
- 可参考代码如下
{ "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, 同时要引入库, 指令: -l, 这里lib_name注意不要前面的lib
- 同时这里本人踩了大坑,g++编译时, -l 必须要放在源文件后面,推荐直接放最后面,不然它还是链接不上
- 同时你链接需要.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()
- 最后找到对应位置即可编译生成啦
- 可参考代码如下
- 下载完毕选择一个地方安装解压即可
-
- c_cpp_properties.json
- tasks.json