我选择的当然是CMake+Make管理编译项目,显然需要依赖的三方库有
1 GLFW的整合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| include(FetchContent) if (UNIX) set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_WAYLAND OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_X11 ON CACHE BOOL "" FORCE) endif ()
FetchContent_Declare( glfw GIT_REPOSITORY https://github.com/glfw/glfw.git GIT_TAG 3.4 GIT_PROGRESS TRUE )
FetchContent_MakeAvailable(glfw)
|
2 GLAD的整合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
find_package(Python3 REQUIRED COMPONENTS Interpreter) set(MY_VENV "${CMAKE_BINARY_DIR}/.venv") if (WIN32) set(MY_PYTHON "${MY_VENV}/bin/python.exe") else () set(MY_PYTHON "${MY_VENV}/bin/python3") endif ()
if (NOT EXISTS "${MY_VENV}") message(STATUS "Creating virtualenv at ${MY_VENV}") execute_process( COMMAND ${Python3_EXECUTABLE} -m venv "${MY_VENV}" RESULT_VARIABLE VENV_CREATE_RESULT ) if (NOT VENV_CREATE_RESULT EQUAL 0) message(FATAL_ERROR "Failed to create virtual environment at ${MY_VENV}") endif () else () message(STATUS "Found existing virtualenv: ${MY_VENV}") endif ()
execute_process( COMMAND ${MY_PYTHON} -m ensurepip --upgrade RESULT_VARIABLE VENV_PIP_RET OUTPUT_QUIET ERROR_QUIET ) if (NOT VENV_PIP_RET EQUAL 0) message(FATAL_ERROR "Failed to bootstrap pip inside virtualenv") endif ()
execute_process( COMMAND ${MY_PYTHON} -m glad --help RESULT_VARIABLE GLAD_RET OUTPUT_QUIET ERROR_QUIET ) if (NOT GLAD_RET EQUAL 0) message(STATUS "Installing glad in venv...") execute_process( COMMAND ${MY_PYTHON} -m pip install glad --no-cache-dir --timeout 60 -i https://pypi.tuna.tsinghua.edu.cn/simple RESULT_VARIABLE GLAD_INSTALL_RET ERROR_VARIABLE GLAD_INSTALL_ERR ) if (NOT GLAD_INSTALL_RET EQUAL 0) message(FATAL_ERROR "Failed to install glad in virtualenv:\n${GLAD_INSTALL_ERR}") endif () message(STATUS "Glad installed successfully in ${MY_VENV}") else () message(STATUS "Glad already exist in ${MY_VENV}") endif ()
include(FetchContent)
FetchContent_Declare( glad GIT_REPOSITORY https://github.com/Dav1dde/glad.git GIT_TAG v2.0.8 GIT_PROGRESS TRUE )
FetchContent_MakeAvailable(glad)
set(GLAD_GENERATED_DIR "${CMAKE_BINARY_DIR}/generated/glad") set(GLAD_C_FILE "${GLAD_GENERATED_DIR}/src/glad.c") set(GLAD_H_FILE "${GLAD_GENERATED_DIR}/include/glad/glad.h") file(MAKE_DIRECTORY ${GLAD_GENERATED_DIR})
if (NOT EXISTS ${GLAD_C_FILE}) if (APPLE) set(GLAD_API_VER "4.1") set(GLAD_EXTENSIONS "") elseif (LINUX) set(GLAD_API_VER "4.6") set(GLAD_EXTENSIONS "GL_ARB_gl_spirv") else () message(FATAL_ERROR "Unknown platform, cannot specify OpenGL version") endif () message(STATUS "Glad output not found, will generate with glad2 for OpenGL${GLAD_API_VER}")
set(GLAD_ENV) if(DEFINED ENV{http_proxy}) list(APPEND GLAD_ENV http_proxy=$ENV{http_proxy}) endif() if(DEFINED ENV{https_proxy}) list(APPEND GLAD_ENV https_proxy=$ENV{https_proxy}) endif()
add_custom_command( OUTPUT ${GLAD_C_FILE} ${GLAD_H_FILE} COMMAND ${CMAKE_COMMAND} -E env ${GLAD_ENV} ${MY_PYTHON} -m glad --generator c --spec gl --api gl=${GLAD_API_VER} --profile core --out-path ${GLAD_GENERATED_DIR} --extensions "${GLAD_EXTENSIONS}" DEPENDS ${MY_PYTHON} ${MY_VENV}/bin/glad COMMENT "Generating glad loader with glad2" VERBATIM ) endif ()
add_custom_target(glad-gen DEPENDS ${GLAD_C_FILE} ${GLAD_H_FILE} ) add_library(glad STATIC ${GLAD_GENERATED_DIR}/src/glad.c) target_include_directories(glad PUBLIC ${GLAD_GENERATED_DIR}/include) add_dependencies(glad glad-gen)
|
3 GLM的整合
1 2 3 4 5 6 7 8 9 10 11 12 13
| include(FetchContent)
FetchContent_Declare( glm GIT_REPOSITORY https://github.com/g-truc/glm.git GIT_TAG 1.0.1 GIT_PROGRESS TRUE )
FetchContent_MakeAvailable(glm)
target_compile_definitions(glm INTERFACE GLM_ENABLE_EXPERIMENTAL)
|