You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用CMake同时构建外部库与自研跨平台OpenGL应用?

解决跨平台CMake构建OpenGL依赖库(无系统权限)的方案

这问题我太熟了——当你没有系统权限安装依赖,又要做跨平台OpenGL项目时,CMake的FetchContent模块(CMake 3.11+支持,现在主流版本都满足)就是完美的解决方案。它能把glfw、glbinding、glm这些依赖的源码拉取到项目本地构建目录,和你的应用一起编译,完全不会触碰系统全局环境,Windows和Linux都能无缝运行。

下面是一套完整的、可直接复用的CMake配置方案:

1. 基础CMake配置

首先在你的CMakeLists.txt开头设置最低版本和项目信息:

cmake_minimum_required(VERSION 3.11 FATAL_ERROR)
project(MyOpenGLApp LANGUAGES CXX)

# 启用FetchContent模块,用于拉取并构建依赖
include(FetchContent)

2. 逐个引入依赖库

GLM(头文件库,无需编译)

GLM是纯头文件库,拉取后直接引入头文件路径即可,选一个稳定的版本号:

FetchContent_Declare(
    glm
    GIT_REPOSITORY https://github.com/g-truc/glm.git
    GIT_TAG 0.9.9.8 # 可替换为你需要的版本,比如最新的稳定版
)
FetchContent_MakeAvailable(glm)

GLFW(需要编译,关闭冗余构建选项)

GLFW需要编译,我们要关闭示例、测试、文档这些不需要的部分,减少编译时间:

FetchContent_Declare(
    glfw
    GIT_REPOSITORY https://github.com/glfw/glfw.git
    GIT_TAG 3.3.8 # 稳定版本,兼容性好
)
# 设置GLFW的编译选项,跨平台通用
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "Build GLFW examples")
set(GLFW_BUILD_TESTS OFF CACHE BOOL "Build GLFW tests")
set(GLFW_BUILD_DOCS OFF CACHE BOOL "Build GLFW documentation")
set(GLFW_INSTALL OFF CACHE BOOL "Generate installation target")
FetchContent_MakeAvailable(glfw)

glbinding(OpenGL绑定库,关闭冗余构建)

glbinding同样需要编译,同样关闭不需要的组件:

FetchContent_Declare(
    glbinding
    GIT_REPOSITORY https://github.com/cginternals/glbinding.git
    GIT_TAG v3.3.0 # 稳定版本
)
# 设置glbinding的编译选项
set(GLBINDING_BUILD_EXAMPLES OFF CACHE BOOL "Build glbinding examples")
set(GLBINDING_BUILD_TESTS OFF CACHE BOOL "Build glbinding tests")
set(GLBINDING_BUILD_TOOLS OFF CACHE BOOL "Build glbinding tools")
set(GLBINDING_INSTALL OFF CACHE BOOL "Generate installation target")
FetchContent_MakeAvailable(glbinding)

3. 配置你的应用

添加你的可执行文件,并链接所有依赖库:

# 替换成你的应用源码文件,比如main.cpp、renderer.cpp等
add_executable(MyOpenGLApp main.cpp)

# 设置C++标准,OpenGL应用建议用C++17及以上
target_compile_features(MyOpenGLApp PRIVATE cxx_std_17)

# 链接所有依赖库
target_link_libraries(MyOpenGLApp PRIVATE
    glm::glm
    glfw
    glbinding::glbinding
    glbinding::glbinding-aux # 如果需要glbinding的辅助工具,比如日志、回调,就加上
)

4. 跨平台注意事项

  • Windows:CMake会自动适配MSVC或MinGW工具链,不需要额外配置,只要你的CMake环境正常。
  • Linux:确保系统有OpenGL的基础依赖(比如libx11-dev、libxi-dev、libgl1-mesa-dev等)——这些是系统基础包,一般发行版默认自带,如果没有,可能需要联系管理员安装(GLFW构建必须依赖这些)。
  • 缓存机制:第一次构建时,CMake会自动从GitHub拉取依赖源码,之后会缓存到本地,后续构建不会重复拉取,速度更快。
  • 本地源码替换:如果你已经下载了依赖库的源码,不想从GitHub拉取,可以在FetchContent_Declare之前设置变量,比如:
    set(FetchContent_SOURCE_DIR_GLM "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glm")
    
    这样CMake会使用你本地的源码目录。

这套方案完全不需要系统权限,所有依赖产物都在项目的构建目录里,跨平台兼容性拉满,你只需要专注于自己的OpenGL应用代码就行。

内容的提问来源于stack exchange,提问作者user975989

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:21:50