opengl

该文详细介绍了如何在Windows上的VScode中使用CMake配置和编译OpenGL项目,包括下载glfw和glad库,设置文件结构,编写CMakeLists.txt文件,以及配置VScode以实现代码自动构建和调试。此外,还提供了VScode的C++插件配置,包括c_cpp_properties.json和launch.json的设置,以支持头文件路径和调试功能。
摘要由CSDN通过智能技术生成

Windows上VScode,CMake配置OpenGL,执行和调试

面向萌新(用VS不好吗,找罪受),废话少讠

默认你已经

  • 会一点cmake知识,已经安装了cmake
  • 安装完了VScode,C++插件,CMake插件,MingGW编译器

需要

我们需要glad glfw 两个库

  • glfw下载:https://www.glfw.org/download.html
    我们要下载编译好的,在 Windows pre-compiled binaries
    我下载的是64位的,如果下错了会导致编译程序链接阶段找不到库/找不到函数
  • glad下载:https://glad.dav1d.de/
    需要将Language设置为 c/c++,将Specification设置为 OpenGL。在 API 部分设置 gl 版本 3.3 或更高版本,将Profile设置为core并将Extensions留空。勾选_Generate a loader_选项并单击Generate。
    他会跳转到新的页面,点哪个zip文件下载下来。

下载结束之后解压缩。

开始

  • 新建文件夹,进入,新建include文件夹(用来放入第三方库的头文件),再新建一个src文件夹(我们的源文件),新建out文件夹(我们输出的exe文件会到这里),新建lib文件夹(我们将会把所需要的第三方链接库放入)
  • 将你解压缩好的 glad 文件夹下的 include 里面的文件复制到我们的 include 里面
  • 将你解压缩好的 glfw 文件夹下的 include 里面的文件复制到我们的 include 里面
  • 将你解压缩好的 glad 文件夹下的 src 里面的文件复制到我们的 src 里面
  • 将你解压缩好的 glfw 文件夹下的l ib-mingw-w64 里面的文件复制到我们的 lib 里面

这一阶段你的工程应该是这样:
在这里插入图片描述

如果你有反骨不想按这样的结构来也可以,你会cmake就能做出来。

编译

我们现在就可以开始自己输入代码测试了(测试代码在learnopengl.com里面会有)
测试代码在这里:[[代码]]
src下新建一个main.cpp,代码粘贴进去。

接下来需要你有cmake的知识了
不过直接粘我写好的应该也可以,
在根目录下新建一个CMakeLists.txt (不要打错字哦),贴进如下代码

cmake_minimum_required(VERSION 3.6)    #指示cmake最低版本
project(Opengl)                        #项目名称
set(CXX_STANDARD 17)                   #设置C++版本
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/out)   #设置编译好的exe文件输出目录

include_directories(include)           #包含我们的引入的第三方头文件

link_directories(${PROJECT_SOURCE_DIR}/lib)  # 添加链接库的目录
find_library(GLFW_LIB glfw3 ${PROJECT_SOURCE_DIR}/lib)  # 在链接库中找到我们的glfw3链接库文件。

if(NOT GLFW_LIB)    #如果找不到glfw的话这里会报错。有可能你的glfw版本不会32位的。
    message(FATAL_ERROR "Cannot find glfw3 library")
endif()

file(GLOB SRC_FILE src/*.c src/*.cpp)   #找到src中的所有c/cpp文件,然后指定名称位SRC_CILE,GLOB只是内置的一个参数,别在意。
add_executable(main ${SRC_FILE})        #开始生成可执行文件

target_link_libraries(main ${GLFW_LIB})  # 这一行需要在add_executable之后,指示生成的文件链接我们指定的库。

如果你有cmake插件:
ctrl s 保存一下CMakeLists,cmake插件会自动帮你生成build文件夹。(如果没有,你就ctrl shift p,输入cmake:configure 然后指定编译器即可)
让vscode的控制台进入 build文件夹(cd build)
然后输入mingw32-make.exe(输入ming然后tab就能出来一般)
如果你没有cmake插件:
装一个
如果你不想装
mkdir build
cd build
cmake …
mingw32-make.exe (cmake指令也可以)
如果你修改了文件结构(增删了文件)那就重新生成一下cmake。
exe文件会在out下。双击执行就可以了。

好了已经学会了如何使用cmake构建工程,下面是如何配合使用vscode

配置VScode

目的:实现vscode可以自动化生成程序并运行,不需要我们输入代码还要双击执行了,而且还可以调试。

vscodeC++插件的代码识别 和 cmake配合mingw编译是两个东西,我们写cmake包含路径和链接是给mingw编译器看的。
我们帮vscode指定头文件搜索目录,不然vscode不认识#include的头文件。

ctrl shift p 搜索C++ edit configuration(UI) 然后会跳转一个界面并生成一个.vscode文件夹和里面的c_cpp_properties.json文件,
我们可以在这个界面的”包含路径“里面配置或者直接在.vscode的c_cpp_properties.json文件配置。
包含路径添加"${workspaceFolder}/include",json文件配置的话需要在上一行添逗号。
添加之后我们main.cpp文件中的头文件就不报错了。

vscodeC++的执行需要lanuch.json文件,点击到调试界面,点击create a launch.json file
打开launch.json文件,点 添加配置,选gdb启动。
按如下配置:

  • 让”program“选中我们在out中生成的main.exe文件:“program”: “${workspaceFolder}/out/main.exe”(你至少已经生成了exe文件)
  • 让”“miDebuggerPath”:选定你的gdb.exe程序(win + r cmd 然后 where gdb就可以知道你的gdb路径)。(或者直接删了这行,让他自己去找。)
    如下是我的配置,只是修改了program和删除了miDebuggerPath。
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/out/main.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:/VScode/msys/mingw64/bin/gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
	            //"preLaunchTask":"build",//这个你们先不要写上去,我一会解释。
        }
    ] 
}

这个时候就可以添加断点进行F5调试了。

但是这样只是告诉了vscode对我们用cmake生成的exe进行执行或者调试,我们修改了文件的话还是要重新cmake重新生成exe
launch.json 有一个“preLaunchTask”的属性,可以帮我们提前执行一些指令。
我们可以新添加一个tasks.json文件,然后将这一部分指令告诉tasks.json
ctrl shift p 输入tasks 然后.vscode生成了一个文件,
我们要把指令写到json里面,下面是我的,

{
    "tasks": [
        {
            "label": "cmake",
            "command":"cmake",
            "args": [
                ".."
            ]
        },
        {
            "label": "make",
            "command":"mingw32-make.exe",
            "args": [
            ]
        },
        {
            "label": "build",   
            "dependsOn":[
                "cmake",
                "make",
            ]
        }
    ],
    "version": "2.0.0",
    "options": {
        "cwd":"${workspaceFolder}/build",//,这里要指定到这个文件夹,在build里面进行代码执行。
    }
}

“label”是唯一标识,第三个task会执行前两个task,前两个task会在“cwd”指定为文件夹执行cmake … 和mingw32-make.exe,然后exe输出到out,然后launch.json里面添加一句"preLaunchTask":“build”,(”build“就是第三个task)这条指令帮我们执行task里面的指令,然后进行执行或者调试。

最后:在这里插入图片描述
作者是个菜鸡,第一次发帖,稿子有问题的话可以告诉我改。
想好好了解vscode构建C++的可以看这俩视频:vscode构建C++cmake+vscode

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值