一个具有着色器管理和UI控制的现代OpenGL应用程序骨架。
# 更新软件包列表
sudo apt-get update
# 安装OpenGL开发文件
sudo apt-get install libgl1-mesa-dev
# 安装GLEW
sudo apt-get install libglew-dev
# 安装GLFW3
sudo apt-get install libglfw3-dev
# 安装GLM
sudo apt-get install libglm-dev
# 安装ImGui
sudo apt-get install libimgui-dev
# 安装SimpleIni
sudo apt-get install libsimpleini-dev
# 安装ICU (用于SimpleIni的Unicode支持)
sudo apt-get install libicu-dev
# 创建构建目录,使用CMake配置
cmake -B build
# 构建
cmake --build build
# 运行
./build/opengl_skeleton
./build/opengl_skeleton
shader_config.ini
修改着色器参数shaders/vertex
和 shaders/fragment
目录在CMake中,有两种主要的方法来查找和链接外部库:find_package
和 pkg-config
。本项目同时使用了这两种方法,下面详细介绍它们的区别和使用场景。
find_package
是CMake原生的库查找机制,它通过查找和加载CMake模块来定位库文件。
Find<包名>.cmake
的模块文件<包名>_INCLUDE_DIRS
、<包名>_LIBRARIES
等)<包名>Config.cmake
文件(通常由库的开发者提供)# 查找OpenGL库
find_package(OpenGL REQUIRED)
# 查找GLEW库
find_package(GLEW REQUIRED)
# 查找GLFW3库
find_package(glfw3 REQUIRED)
# 查找GLM库
find_package(glm REQUIRED)
pkg-config
是一个用于从已安装的库中检索编译和链接参数的工具,在Linux系统上广泛使用。
.pc
文件(通常位于 /usr/lib/x86_64-linux-gnu/pkgconfig
)pkg_check_modules
命令调用pkg-config获取这些信息# 启用pkg-config支持
find_package(PkgConfig REQUIRED)
# 查找ImGui库
pkg_check_modules(IMGUI REQUIRED imgui)
# 查找SimpleIni库
pkg_check_modules(SIMPLEINI REQUIRED simpleini)
.pc
文件target_include_directories(${PROJECT_NAME} PRIVATE
${IMGUI_INCLUDE_DIRS} # 添加IMGUI头文件目录
${SIMPLEINI_INCLUDE_DIRS} # 添加SimpleIni头文件目录
)
target_link_libraries(${PROJECT_NAME} PRIVATE
${IMGUI_LIBRARIES} # 添加IMGUI库
${SIMPLEINI_LIBRARIES} # 添加SimpleIni库
)
在本项目中,我们结合使用了这两种方法:
find_package
查找OpenGL、GLEW、GLFW3和GLM等提供CMake支持的库pkg-config
查找ImGui和SimpleIni等通过pkg-config提供信息的库这种组合使用可以充分利用两种方法的优点,提高项目的兼容性和可移植性。
cmake_minimum_required(VERSION major.minor)
project(项目名 [语言列表])
set(变量名 值 [CACHE 类型 描述])
cmake_policy(SET 策略名 值)
find_package(包名 [REQUIRED] [COMPONENTS 组件列表])
pkg_check_modules(变量前缀 包名)
add_executable(目标名 源文件列表)
add_definitions(-D定义名)
target_include_directories(目标名 PRIVATE|PUBLIC|INTERFACE 目录列表)
target_link_libraries(目标名 PRIVATE|PUBLIC|INTERFACE 库列表)
add_custom_command(TARGET 目标名 POST_BUILD COMMAND 命令)
本项目采用 MIT 许可证 - 详见 LICENSE 文件