VSCode + Mingw64配置OpenGL环境

前言

最近在复习Learning OpenGL,以前学的时候是根据书的介绍直接使用VS2022来配置OpenGL的开发环境,根据书的操作使用Cmake构建glfw3,添加glad,然后正确设置项目以来并且正确链接以后一般不会有什么问题。但是由于练习的文件都是比较简单的单文件,这一次做练习并不像新建一个vs项目,所以考虑使用vscode进行开发。本来以为会比较简单,也就是手动添加一下依赖,链接一下,但是过程中还是遇到了一些问题,花了一些时间,并且网上也没有找到相应的方法或者解决方案,所以记录一下。

这对熟悉C++开发的人来说可能十分简单,甚至是一个基础的问题,但是从我解决这个问题的角度来说,并不能有效地获取到我需要的答案,花费了一些比较多的时间,我认为还是值得写出来分享一下。
我做分享是为了回馈这个我曾经并且至今依然在受益的互联网

软件环境以及vscode插件配置

本人使用的vscode是insider版本,理论上无论insider还是stable版本都不会有影响,本人暂未验证,请自行验证。

使用到的软件以及vscode插件有:

  • C/C++(必需)
  • CMake(用来编译glfw3,有其他想法的可以使用其他替代软件)
  • msys2 (我是用msys2安装mingw64工具链,如果使用其他工具的也可以自行替换)

编写C++文件

首先我们需要新建一个文件夹作为我们的工作目录,然后按照OpenGl的CreateWindow示例,简单编写对应的C++源文件,我这里直接命名为Source.cpp,可以看到会有报错,提示找不到源文件GLAD和GLFW3

这是最好解决的,我们直接为编译器路径设置一下include路径就好(具体路径根据自己环境设置)

点击quickFix编辑includePath配置(UI界面下配置)(具体路径根据自己环境设置)

或者可以使用JSON配置 (具体路径根据自己环境设置)

注意圈出来的,我设置的编译器路径是mingw64下的的g++(具体路径根据自己环境设置),还有对应的intelliSenseMode也最好恰当地配置(理论上没配置好只会影响代码提示)

经过上面的操作,可以看到报错已经消失,但是编译代码会发现有其他错误

添加调试文件并运行代码

我们直接使用vscode的C/C++插件生成调试文件并且试着运行一下代码,ctrl + shift + p打开顶部栏选择

随后继续选择

可以看到在当前我们工作目录下的.vscode文件夹下面生成了一份launch.json文件,里面自动帮我们添加了一些内容(具体路径根据自己环境设置有所不同)

然后我们返回我Source.cpp页签,选中左边栏的调试

点击小三角形可以直接运行调试,或者我们可以继续使用ctrl + shift + p打开顶部栏选择(必须在你想要运行的Cpp文件下选择)

可以看到我们并不能正常运行,会有报错

这个问题十分简单,有基本的C++知识或者根据Learning OpenGL的操作都可以解决,我们需要把glad头文件添加到我们的项目中,这个时候我们检视一下左侧栏的文件子选栏,可以看到我们在.vscode文件夹下多了一份文件tasks.json(一般第一次都会生成,如果没有生成,重新点击小三角重新Debug一次就行,如果实在是没有自动生成,直接复制粘贴我的吧)

我们往args中添加glad.c文件的路径如下:

"args": [
  "-fdiagnostics-color=always",
  "-g",
  "${file}",
  "C:\\glad\\src\\glad.c",

  "-I",
  "C:\\glad\\include\\",
                
  "-I",
  "C:\\glfw\\glfw-3.3.8\\include\\",
                
  "-o",
  "${fileDirname}\\${fileBasenameNoExtension}.exe"
],

(上面同时添加了glfw3,如果没有加这个会有跟上面glad类似的报错,由于是同样的报错就不浪费时间讲了)

GLFW3报错相关

经过上面的处理,后面就是GLFW3相关的一堆报错了,根据Learning OpenGL可知,我们还需要添加对应的glfw3.lib(Cmake编译过程参考Learning OpenGL即可)

"args": [
    "-fdiagnostics-color=always",
    "-g",
    "${file}",
    "C:\\glad\\src\\glad.c",

    "-I",
    "C:\\glad\\include\\",

    "-I",
    "C:\\glfw\\glfw-3.3.8\\include\\",
    

    "-L",
    "C:\\glfw\\glfw-3.3.8\\build\\src\\Debug",

    "-l",
    "glfw3",

    "-l",
    "opengl32",

    
    
    "-o",
    "${fileDirname}\\${fileBasenameNoExtension}.exe"
],

本来会以为完事大吉,结果出现了更加恐怖的事情:

后面经过排查,(其实如果对Linux和Window下C/C++相关的工具链以及编译知识有所了解,这个一眼就看出是什么问题了),发现其实是动态库的使用有问题,因为我使用的是mingw64的g++编译器,不是cl编译器,不应该使用glfw3.lib库,因为我对这一块也不是很熟悉,所以下面只给出解决办法

首先使用Cmake重新编译glfw,这里我们使用Cmake GUI,在glfw文件夹下新建一个gccbuild文件夹(名字随意)

然后点击Configure

如果默认的编译器不是gcc可以指定编译器

一般不需要做修改,显示应当如下

然后点击Generate
生成以后修改一下tasks.json

(所有配置如下)


{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "C:\\msys64\\mingw64\\bin\\g++.exe",
            "args": [
                "-g",
                "${file}",
                "C:\\glad\\src\\glad.c",

                "-I",
                "C:\\glad\\include\\",
                
                "-I",
                "C:\\glfw\\glfw-3.3.8\\include\\",

                "-L",
                "C:\\glfw\\glfw-3.3.8\\gccbuild\\CMakeFiles\\src",
                
                "-l",
                ":libglfw3.a",

                "-l",
                ":libgdi32.a",

                "-l",
                ":libopengl32.a",
                
                
                "-fdiagnostics-color=always",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",

            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

然后就可以正常编译愉快写代码啦!

posted @ 2022-11-01 02:38  DotLink  阅读(1920)  评论(0编辑  收藏  举报