opengl-homework/CMakeLists.txt

120 lines
3.6 KiB
CMake
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 版本要求
cmake_minimum_required(VERSION 3.31)
# 项目名称和语言
project(opengl_homework LANGUAGES CXX)
# C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# 自动运行 MOC, UIC, RCC (如果使用 Qt这里不需要)
#set(CMAKE_AUTOMOC ON)
#set(CMAKE_AUTOUIC ON)
#set(CMAKE_AUTORCC ON)
# 包含目录
include_directories(include)
# GLEW: 作为静态库链接或动态库
# 查找GLEW
find_package(GLEW REQUIRED)
if (GLEW_FOUND)
include_directories(${GLEW_INCLUDE_DIRS})
message(STATUS "Found GLEW: ${GLEW_LIBRARIES}")
else ()
message(FATAL_ERROR "GLEW not found")
endif ()
# 查找OpenGL
find_package(OpenGL REQUIRED)
if (OPENGL_FOUND)
include_directories(${OPENGL_INCLUDE_DIR})
message(STATUS "Found OpenGL: ${OPENGL_gl_LIBRARY}")
else ()
message(FATAL_ERROR "OpenGL not found")
endif ()
# 查找GLUT
find_package(GLUT REQUIRED)
if (GLUT_FOUND)
include_directories(${GLUT_INCLUDE_DIR})
message(STATUS "Found GLUT: ${GLUT_glut_LIBRARY}")
else ()
message(FATAL_ERROR "GLUT not found")
endif ()
# GLM (OpenGL Mathematics Library)
# 尝试查找系统安装的GLM
find_package(glm QUIET)
if (NOT glm_FOUND)
message(STATUS "glm not found. Fetching from source...")
include(FetchContent)
FetchContent_Declare(
glm
GIT_REPOSITORY https://github.com/g-truc/glm.git
GIT_TAG 0.9.9.8 # 你可以选择一个具体的tag或者分支
)
FetchContent_MakeAvailable(glm)
# 对于FetchContent下载的glm其include目录通常是 ${glm_SOURCE_DIR}
# 对于一些版本的CMake/glm可能是 ${glm_SOURCE_DIR}/glm
# 为了保险起见,可以都添加,或者根据实际下载的结构调整
include_directories(${glm_SOURCE_DIR})
message(STATUS "Fetched glm and added include directory: ${glm_SOURCE_DIR}")
else ()
message(STATUS "Found system-installed glm: ${glm_INCLUDE_DIR}")
include_directories(${glm_INCLUDE_DIR})
endif ()
# 创建 shaders 目录的引用,方便在代码中加载 (可选)
# set(SHADER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/shaders)
# 添加可执行文件
add_executable(OpenGLProject
main.cpp
shader_utils.cpp
)
# 链接库
target_link_libraries(OpenGLProject
PRIVATE
${OPENGL_LIBRARIES}
${GLEW_LIBRARIES}
${GLUT_glut_LIBRARY}
)
# 如果GLEW是作为静态库链接的可能需要定义GLEW_STATIC
# target_compile_definitions(OpenGLProject PRIVATE GLEW_STATIC)
# 为了确保着色器文件能被程序找到,可以将它们复制到构建目录
# 或者在代码中指定相对或绝对路径
# 这里我们假设着色器文件和可执行文件在同一目录下运行,或者代码中处理路径
# 如果着色器在 "shaders" 子目录中:
set(SHADER_FILES
shaders/phong.vert
shaders/phong.frag
shaders/axes.vert
shaders/axes.frag
)
# 将着色器文件复制到可执行文件旁边
foreach (SHADER_FILE ${SHADER_FILES})
add_custom_command(
TARGET OpenGLProject POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:OpenGLProject>/shaders
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/${SHADER_FILE}
$<TARGET_FILE_DIR:OpenGLProject>/shaders/
COMMENT "Copying shader ${SHADER_FILE} to build directory"
)
endforeach ()
# 创建目标 shaders 目录
add_custom_command(
TARGET OpenGLProject POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:OpenGLProject>/shaders
COMMENT "Creating shaders directory in build output"
)