我正在尝试为opengl开发设置visual studio代码。我已经为普通的c/c++开发工作了,我现在正试图将opengl开发添加到混合中。我知道如何在其他平台(如Eclipse、Xcode、Visual Studio、CodeBlocks)上设置opengl。我问题的根源更多的是如何在visualstudio代码中设置依赖项。我的最佳猜测是在task.json文件中运行一个任务。现在,每当我运行程序时,它就充满了编译项目的代码。
OpenGl&C/C++&VSCode
遇到了同样的问题。注意这里有两个问题:
- 如何设置
launch.json
和tasks.json
文件?- 从使用VSCode进行C++编程的官方VSCode文档开始
- 任务文档更详细地解释了如何设置和运行
tasks
- 要使用哪些命令来编译代码?
- 这就是它变得棘手的地方。编译取决于操作系统和环境。以下部分主要集中于此:
MAC
对我来说,主要的问题是我使用的是MAC,许多解释只针对Linux和Windows(它们没有framework
参数),或者它们解释了如何在Xcode GUI中设置这一切。
TL;DR
正如这篇Github Gist和这篇StackOverflow帖子都建议的那样:
- 修复包含文件名
- 并非所有内容都在
<gl/*>
中(例如,Mac的<OpenGL/*>
用于部分内容,<GLUT/*>
用于供过于求文件)
- 并非所有内容都在
- 为了运行,请将
framework
添加到构建参数中(以包括外部库),例如。。。gcc -o ex1 ex1.c -framework GLUT -framework OpenGL -Wno-deprecated
cc <your_file.c> -framework GLUT -framework OpenGL
- 别忘了:将这些
frameworks
添加到C/C++扩展设置和/或tasks.json
中
(再次:使用clang
或clang++
时非常相似)
将这一见解与C/C++tasks
的官方文档集成在一起,一切都完成了!:)
更多详细信息
以上只是我整个旅程的一个简短版本,详细如下:
- 我还从使用VSCode进行C++编程的官方VSCode指令开始(您也提到了这一点)
- 然后我按照他们底部的链接:在Visual Studio代码中使用Clang(GCC设置非常相似)
- 遵循这个Github Gist关于Mac和非Mac OpenGl编译之间的差异。有两个主要区别:
- APPLE路径略有不同;并非所有内容都在
<gl/*>
中(例如,核心文件的<OpenGL/*>
和供过于求文件的<GLUT/*>
) - 您必须通过
framework
标志添加OpenGL
和其他库
- APPLE路径略有不同;并非所有内容都在
- 一旦你处理好了:
- 也将这些
frameworks
添加到C/C++扩展设置中 - (刚开始时,您可能希望减少弃用警告;因为OpenGL在过去十年中使用
-Wno-deprecated
进行了重大更改)
- 也将这些
- 如果您以前没有这样做过,您可能想要
brew install glew
和brew install glfw
和/或您使用的任何其他外部库
关于Windows&Linux
VSCode设置基本相同。一旦正确设置了C/C++扩展,请确保查看位于官方"C/C++for Visual Studio Code"文档页底部的环境文档。
然而,更大的问题通常是如何编译它。我最近没有在非MAC系统上编译的例子或经验;但这里有一些相关的参考文献:
- 在Linux上编译OpenGl
- 在Windows环境下用GCC编译OpenGl
跨平台ish
显然,根据这个(到目前为止)开放的github问题#1083,跨平台开发仍然可能会引起一些头痛。
我还发现了一个例子,有人在这里尝试使用VSCode进行OpenGl跨平台编译。您可能需要签出他们的整个.vscode/
文件夹(如果不是他们的整个项目设置)。
点击按钮即可运行+调试
现在,按照以下说明,可以很容易地将任意数量的启动(运行和/或调试)配置添加到内置的启动+调试器UI中。
[已弃用]VSCode"Code Runner"扩展
在调试器UI出现之前(或者至少在我注意到它之前),您可以安装CodeRunner扩展,您会在右上角(或Command+Alt+N
)看到一个整洁的"运行代码"小按钮。
如果你只想用它来运行一个可执行文件,这很好。如果你想单独运行单个文件,这会变得有点困难。我还没有尝试过,但正如他们所建议的,为此,您可以使用一种特殊的文件命名模式,即glob模式(例如*.gl.cpp
),并使用code-runner.executorMapByGlob
设置根据文件名使用不同的编译+运行参数。
Ubuntu解决方案:
有同样的问题,我必须做的只是:
安装
sudo apt-get install libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libglew-dev
如前所述
然后
- (打开vscode)>文件>打开文件夹>";选择您的c++的项目文件夹">
- 打开要编译的主
.cpp
文件(从开始) - 然后产生CCD_;F5〃>选择";C++(GDB/LLDB)">选择g++编译器>停止编译过程
- 编辑
tasks.json
,添加额外的参数(如@crazypicklerick所述),如下所示:
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ build active file",
"command": "/usr/bin/g++",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}",
"-lGLU",
"-lglfw",
"-lGLEW",
"-lGL",
"-lglut"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}
- 保存文件并返回主
.cpp
文件
✔️按下";F5〃;再次,它应该立即运行
如果使用gcc/gdb,则在构建任务中添加这些参数-lGLU-lGL-lglut
>OpenGl_c++_GLFW_GLAD_VScode_Linux_mint(Ubuntu/Debian)设置
要求:
第1部分:系统配置
**1) **linux mint预装了c/c++编译器。
**2) **下载带有c++扩展和支持(包括语法高亮显示)的linux_mint的vscode。
提示:超级用户文件安装在/usr/中,本地用户文件存储在/usr/local/中,任何文件都可以在此处使用。
**3) **打开终端并键入以下命令,该命令将安装GLFW库和opengl台面库。
sudo apt-get install libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libglew-dev
使用以下内容检查glfw是否已安装以及mint/ubuntu上的位置:
pkg-config --cflags glfw3
**4) **从网站下载高兴https://glad.dav1d.de/现在在网站上选择:
- 语言=C/C++
- 规范=OpenGL
- API>gl=3.3
- 轮廓=核心
然后点击generate下载高兴的zip。现在将glad.zip文件解压缩到系统上的任何位置,打开它可以找到Include和scr文件。
打开scr文件,然后将greed.c文件复制到包含cpp文件的项目文件夹中。
打开include文件,然后像这样将gree和khr文件复制到usr/include中--->include/gree/gree.h和/include/KHR/KHR.h到/usr/include,这可以通过以下命令完成:
cp -r PathToYourUnzippedGladFolder/include/glad /usr/include
cp -r PathToYourUnzippedGladFolder/include/KHR /usr/include
或
cp -r PathToYourUnzippedGladFolder/include/glad /usr/local/include
cp -r PathToYourUnzippedGladFolder/include/KHR /usr/local/include
默认情况下,linux可能不允许读取和写入这些包含文件的权限,以便授予权限并避免编译过程中出现被拒绝的错误请使用此命令。(转到粘贴高兴文件和KHR包含文件的/use/include或/usr/local/include文件夹)
chmod 755 myfolder //example `chmod 755 glad` , `chmod 755 KHR`
第2部分:VScode配置
**5) **为opengl项目/编码创建一个文件夹,并在该文件夹中打开vscode,然后创建一个cpp文件,将其命名为anything。让我们从learnopengl中粘贴一个简单的三角形opengl代码,该代码已经、glfw和grey使用过。
**6) **只需打开Tasks.json文件进行编辑即可。只需将其复制到其中即可。
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ build active file",
"command": "/usr/bin/g++",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}",
"-lGLU",
"-lglfw",
"-lGLEW",
"-lGL",
"-lglut" ,
"${workspaceFolder}/glad.c"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}
- 保存每个文件,并使用f5运行您的cpp文件,它应该可以工作,并成为triale的可执行文件
记得在tasks.json文件中添加"${workspaceFolder}/glad.c"
,如上图所示,或者只需复制粘贴上面的tasks.json代码
2张屏幕截图:我的tasks.json屏幕截图我在usr的glfw愉快位置包括