• VSCode配置OpenGL开发环境


      首先需要配置好VSCode的C++开发环境,这个网上有参考教程,这里不展开讲了。MinGW的版本信息是:MinGW-W64-builds-4.3.5,CMake的版本是3.15.3。

      最近有时间,想再把OpenGL的教程捡起来再看看。之前用VisualStudio已经配置好了OpenGL的开发环境,后来在使用VSCode的过程中,使用到了Code Run这个插件之后,发现挺适合用来运行片段代码,运行OpenGL的一些示例代码。之前已经配置了VSCode的C++运行环境,觉得再配置一个OpenGL的开发环境应该不会太难,后来发现还是有些地方需要注意的。

      首先还是用之前VisualStudio配置环境需要用到的资源:GLFW,GLAD,可以参考之前的博客

    1、配置GLFW

      改一下CMake,选择MinGW生成:

       点击Configure之后,可能会有错误,类似:sh.exe was found in your PATH,here: xxx Git/bin/sh.exe,这个是因为把Git配置到了环境变量中,导致冲突了。可以修改一下glfw源代码目录下的CMakeLists.txt文件,在里面加上 set(DCMAKE="CMAKE_SH-NOTFOUND") 就可以正常生成了。然后再勾选 BUILD_SHARED_LIBS ,点击Generate生成。

      之后进入build目录,打开控制台,执行mingw32-make命令,没有错误的话可以在build/src目录下得到glfw3.dll,libglfw3dll.a两个文件。

    2、配置GLAD

      glad还是用之前的资源,不过这里是将glad编译成了静态库,之前VisualStudio里面是没有编译的。在glad的目录(里面有include、src两个目录),执行以下命令:

    gcc .srcglad.c -c -I. include
    ar -rc libglad.a glad.o

      就能在glad目录下得到libglad.a 和 glad.o 两个文件。在这里我再创建了一个目录prebuild,把这两个文件放在这个目录下了。

      在这里我的目录是这样的:

       external主要是放库文件、头文件,opengl_study/tutorials里面是放每一章教程里面的示例代码文件,opengl_study/exercises里面是放每一章后面的练习代码文件,其余是配套的一些代码。

    3、配置命令

      在VSCode里面有两种方式运行C++代码:一种是按F5,可以断点调试;另外一种是右键-Run Code。后者就是利用了CodeRun插件实现的。使用两种方法,需要针对两种方法配置好命令。当然这两种方式都是以配置好了C++运行环境为前提的。

    3.1、配置调试命令

      按F5运行,主要是要配置三个文件,.vscode/c_cpp_properties.json 、.vscode/launch.json 和 .vscode/tasks.json:

     3.1.1 .vscode/c_cpp_properties.json

    {
        "configurations": [
            {
                "name": "Win32",
                "includePath": [ 
                    "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include/**",
                    "${workspaceFolder}/**",
                    "${workspaceFolder}/external/glad/include/**",
                    "${workspaceFolder}/external/glm/**",
                    "${workspaceFolder}/external/glfw/include/**",
                    "${workspaceFolder}/external/assimp/include/**"
                ],
                "browse": {
                    "path": [
                        "${workspaceFolder}",
                        "${workspaceFolder}/external/glfw/prebuild",
                        "${workspaceFolder}/external/assimp/prebuild"
                    ]
                },
                "defines": [
                    "_DEBUG",
                    "UNICODE",
                    "_UNICODE",
                    "_VSCODE"
                ],
                "compilerPath": "D:/mingw64/bin/gcc.exe",
                "intelliSenseMode": "gcc-x64"
            }
        ],
        "version": 4
    }

      这个文件主要是配置包含目录,includePath,加上 "${workspaceFolder}/**" 之后基本上目录下的文件都能找到了,这里提一下,${workspaceFolder}这个指的是VSCode当前打开的目录。compilerPath填mingw的目录。

    3.1.2 .vscode/launch.json

    {
      "version": "0.2.0",
      "configurations": [
        {
          "name": "(gdb) Launch", 
          "type": "cppdbg", 
          "request": "launch",
          "program": "${workspaceFolder}/run/${fileBasenameNoExtension}.exe", 
          "args": [], 
          "stopAtEntry": true,
          "cwd": "${workspaceFolder}",
          "environment": [],
          "externalConsole": true, 
          "internalConsoleOptions": "neverOpen",
          "MIMode": "gdb",
          "miDebuggerPath": "D:/mingw64/bin/gdb.exe",
          "setupCommands": [ 
            {
              "description": "Enable pretty-printing for gdb",
              "text": "-enable-pretty-printing",
              "ignoreFailures": false
            }
          ],
          "preLaunchTask": "C/C++: g++.exe build active file" 
        }
        
      ]
    }

      这里注意 program 字段要与生成的exe路径对应,这个生成的exe路径是在后面的tasks.json文件里面配置的。另外就是preLaunchTask要与tasks.json里面定义的task的label对应上。

    3.1.3 .vscode/tasks.json

    {
        "version": "2.0.0",
        "command": "g++",
        "args": [
            "-g",
            "${file}",
            "-o",
            "${workspaceFolder}/run/${fileBasenameNoExtension}.exe"
        ],
        "problemMatcher": {
            "owner": "cpp",
            "fileLocation": [
                "relative",
                "${workspaceRoot}"
            ],
            "pattern": {
                "regexp": "^(.*):(\d+):(\d+):\s+(warning|error):\s+(.*)$",
                "file": 1,
                "line": 2,
                "column": 3,
                "severity": 4,
                "message": 5
            }
        },
        "group": {
            "kind": "build",
            "isDefault": true
        },
        "tasks": [
            {
                "type": "shell",
                "label": "C/C++: g++.exe build active file",
                "command": "D:\mingw64\bin\g++.exe",
                "args": [
                    "-g",
                    "${file}",
                    "-o",
                    "${workspaceFolder}/run/${fileBasenameNoExtension}.exe",
                    "-I${workspaceFolder}/external/glad/include/",
                    "-I${workspaceFolder}/external/glm",
                    "-I${workspaceFolder}/external/glfw/include",
                    "-I${workspaceFolder}/external/assimp/include",
                    "-L${workspaceFolder}/external/glad/prebuild",
                    "-L${workspaceFolder}/external/glfw/prebuild",
                    "-L${workspaceFolder}/external/assimp/prebuild",
                    "-lglfw3dll",
                    "-lglad",
                    "-D_VSCODE"
                ],
                "options": {
                    "cwd": "${workspaceFolder}"
                },
                "problemMatcher": [
                    "$gcc"
                ],
                "group": {
                    "kind": "build",
                    "isDefault": true
                }
            }
        ]
    }

      这里主要是tasks里面的配置,args要填写好对应的命令。这里展开讲一下gcc/g++编译时会用上的命令:-I(大写i)加后面的路径,表示引入的头文件目录;-L(大写l)加后面的路径,表示引入的库文件目录;-D加后面的参数,表示预定义宏/用户自定义宏;-l(小写l)后面加的参数,表示引入的静态库文件。不过这里有个疑问就是:明明生成的文件是libglfw3dll.a,但是用的时候得glfw3dll,如果加上了lib还会报错说找不到。

      配置好这三个文件之后,按F5就能跑起来了。

    3.2 配置右键Run Code命令

      这里主要是配置好 .vscode/setting文件就可以了,打开这个文件,找到code-runner.executorMap这个属性,修改cpp的值:

    "cpp": "cd $dir && g++ $fileName -o $workspaceRoot/run/$fileNameWithoutExt.exe -I $workspaceRoot/assimp/include -I $workspaceRoot/external/glm -I $workspaceRoot/external/glad/include -I $workspaceRoot/external/glfw/include -L $workspaceRoot/external/glad/prebuild -L $workspaceRoot/external/glfw/prebuild -L $workspaceRoot/external/assimp/prebuild -lglfw3dll -L assimpd -lglad -D _VSCODE && $workspaceRoot/run/$fileNameWithoutExt",

      其实就是把之前配置tasks.json文件里面的gcc/g++命令重新写一下。

      都配置好之后,就可以愉快的用VSCode来敲代码啦!

  • 相关阅读:
    【机器学习笔记五】聚类
    【机器学习笔记四】分类算法
    【机器学习笔记三】回归分析
    【机器学习笔记二】回归分析
    【机器学习笔记一】协同过滤算法
    一个简单的前端事件框架
    javascript面向对象理解的补充
    kafka基础知识点
    linux 常用监控命令备注
    最优化算法-梯度下降
  • 原文地址:https://www.cnblogs.com/zhong-dev/p/13859282.html
Copyright © 2020-2023  润新知