首页 > 其他分享 >2、OpenGL-GLFW下载编译

2、OpenGL-GLFW下载编译

时间:2024-07-21 11:25:32浏览次数:9  
标签:cmake OpenGL 编译 glfw GLFW include 目录

文章目录

1. GLFW简介

  • 针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口
  • 跨平台的窗体生成API系统
  • 与OpenGL便捷链接
  • 方便的鼠标键盘消息回调函数

2. 下载

https://www.glfw.org/download.html
在这里插入图片描述

3. 编译

官方编译说明 https://www.glfw.org/docs/latest/compile_guide.html

  1. 一直向下找到cmake配置部分:
    在这里插入图片描述
  2. 使用vscode 打开下载的源码目录,在项目根目录下打开终端配置cmake
    注: 感觉vs工程麻烦,所以这里使用cmake生成Makefile工程,直接使用命令编译
    MinGW Makefiles 报错的可参考https://blog.csdn.net/qq_51355375/article/details/140561782
cmake -S . -B build -G "MinGW Makefiles"			//会自动生成build目录

在这里插入图片描述
4. 编译源码, 进入build目录, 直接make编译, 等待100%即可

make

在这里插入图片描述
编译完成后会在build/src下生成libglfw3.a
在这里插入图片描述

4. 测试

4.1 测试工程构建

  • 新建测试目录,分别创建src, include, lib 目录
  • 将glfw 编译后的libglfw3.a 放到lib目录
  • 将glfw 源码目录下的include 目录下的头文件拷贝到include/GLFW下
  • 根目录创建CMakeLists.txt, src下创建main.c
    工程目录如下:
    在这里插入图片描述

4.2 创建CMakeLists.txt

cmake_minimum_required(VERSION 3.10)  
project(glfw_example VERSION 1.0 LANGUAGES C)  
  
# 设置 C 标准  
set(CMAKE_C_STANDARD 11)  
set(CMAKE_C_STANDARD_REQUIRED True)  
  
# 设置包含 GLFW 头文件的目录  
include_directories(${PROJECT_SOURCE_DIR}/include)  
  
# 假设库文件在 lib 目录下,并且库文件名为 libglfw3.a  
link_directories(${PROJECT_SOURCE_DIR}/lib)  

# 设置可执行文件的输出目录  
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)

#搜素源文件
file(GLOB SRC_LIST "src/*.c")
  
# 添加可执行文件  
add_executable(app ${SRC_LIST})  
  
# 链接 GLFW 库  
target_link_libraries(app glfw3)  

4.3 main.c

#include <GLFW/glfw3.h>  

int main(void) {  
    GLFWwindow* window;  

    if (!glfwInit())  
        return -1;  

    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);  
    if (!window) {  
        glfwTerminate();  
        return -1;  
    }  

    glfwMakeContextCurrent(window);  

    while (!glfwWindowShouldClose(window)) {  
        glfwPollEvents();  

        // 渲染循环内容(这里为空)  
    }  

    glfwTerminate();  
    return 0;  
}

4.4 编译

cmake -G "MinGW Makefiles"
make

在这里插入图片描述
编译成功后会在bin目录下生成app.exe
在这里插入图片描述

4.5 运行测试

进入bin目录, 执行app
在这里插入图片描述
窗口运行,执行成功
在这里插入图片描述
测试工程:https://download.csdn.net/download/qq_51355375/89558736
glfw编译工程:https://download.csdn.net/download/qq_51355375/89558734

标签:cmake,OpenGL,编译,glfw,GLFW,include,目录
From: https://blog.csdn.net/qq_51355375/article/details/140561133

相关文章

  • Thingsboard成功编译安装
    文章目录前言一、安装注意事项二、安装java三、安装maven四、安装docker五、下载thingsboard源码六、启动mvn编译前言Thingsboard云平台的安装有多种方法。最简便的方法是拉取docker镜像安装。而为了方便后期的二次开发,能基于源码方式安装是非常重要的一步。一、......
  • linux 内核功能编译为模块
    在内核配置过程中,makemenuconfig工具提供了一个用户友好的图形化界面,用于选择和配置内核功能。配置选项中的<M>意味着将该功能作为模块(module)来编译。内核配置选项解释在makemenuconfig中,有三种主要的选项来配置内核功能:[]excluded:表示功能被排除在内核之外,即不会被......
  • Java中的编译器插件开发与应用
    Java中的编译器插件开发与应用大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java语言中,编译器插件的开发与应用是一种高级编程技术,能够扩展Java编译器的功能,以满足特定的需求。这些插件可以在编译过程中进行代码分析、优化,甚至修改源代码。本文将......
  • vi编辑器和gcc编译器
    1.vi编辑器vi是Linux中最常用的文本编辑器,嵌入式系统开发人员要熟练使用这个工具,vim是其改进版本。vi编辑器中共有三种模式,进入文件是处于命令行模式1.1如何进入插入模式先按Esc键,而后按下a、A、i、I、o、O中的一个可以进入插入模式新增(append)        ......
  • 编译下载ma35固件
    编译ma35固件1、gitclone源码官方git仓库https://github.com/OpenNuvoton/MA35D1_Buildroot2、编译执行makenumaker_iot_ma35d16f90_defconfig使用makemenuconfig配置buidroot。使用makesavedefconfig把配置的.config文件保存回到defconfig。MA35D1芯片支......
  • shell脚本一键编译WiFi配置需要的工具
    #!/bin/bashPLATFORM='hi3519dv500'PLATFORM_COMPILE=aarch64-v01c01-linux-musl-COMPILE_CC="$PLATFORM_COMPILE"gccCOMPILE_STRIP="$PLATFORM_COMPILE"stripCOMPILE_AR="$PLATFORM_COMPILE"arCOMPILE_RANLIB="$PLATFO......
  • WebGL-编译报错,如何定位sendfile报错位置
    1)WebGL-编译报错,如何定位sendfile报错位置2)设置DepthBufferBits和设置DepthStencilFormat的区别3)Unity打包exe后,游戏内拉不起Steam的内购4)使用了PlayAssetDelivery提交版本被Google报错这是第395篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术......
  • 【开源库】libodb库编译及使用
    前言本文介绍windows平台下libodb库的编译及使用。文末提供libodb-2.4.0编译好的msvc2019_64版本,可直接跳转自取libodb库libodb是一个开源、跨平台、跨数据库的对象关系映射(ORM)系统,可以持久化C++对象到关系数据库,而不必处理表、列或者SQL,无需手动编写任何映射代码。ODB......
  • cocos2d-x 4.0在manjaro 24.0.4编译
    相关版本:gcc/g++14.1.1cmake3.30.01、先参考install-deps-linux.sh下载对应依赖2、cocos2d-x-4.0/templates/lua-template-default/CMakeLists.txt中66行62│if(ANDROID)63│#changeAPP_NAMEtothesharelibrarynameforAndroid,it'svaluedepend......
  • 在Linux中,编译内核的意义与步骤?
    在Linux系统中,编译内核是一个重要的操作,它允许用户根据自己的硬件配置和需求定制内核。以下是编译内核的意义和步骤的详细说明:1.编译内核的意义定制化:用户可以根据自己的硬件和需求选择内核的配置选项,从而优化系统性能。安全性:通过编译内核,可以去除不需要的模块和功能,减少潜......