如何使用 cmake 在项目构建期间构建 SDL2?
How to build SDL2 during project build using cmake?
我想让自己成为图形的跨平台设置。我正在尝试使用 cmake 构建 SDL2。这是我目前的 CMakeLists.txt :
cmake_minimum_required(VERSION 3.5.0 FATAL_ERROR)
set(PROJECT_NAME "OpenGLZero")
set(SDL2_DIR "external/SDL2-2.0.9")
set(GLEW_SOURCE_DIR "external/glew-2.1.0")
set(GLM_SOURCE_DIR "external/glm-0.9.9.3")
set(BUILD_SHARED_LIBS OFF CACHE BOOL "")
find_package(OpenGL REQUIRED)
add_subdirectory(${SDL2_DIR})
include_directories(${GLEW_SOURCE_DIR}/include
${GLM_SOURCE_DIR}
${SDL2_DIR}/include)
# building glew as a static library
add_library(glew STATIC
${GLEW_SOURCE_DIR}/src/glew.c
${GLEW_SOURCE_DIR}/include)
add_definitions(-DGLEW_STATIC)
add_executable(${PROJECT_NAME} src/main.cpp)
target_link_libraries(${PROJECT_NAME} SDL2main SDL2 ${OPENGL_LIBRARY} glew)
无法在 windows 上找到 SDL2.dll
文件(存在于 build\external\SDL2-2.0.9\Release\
中),尽管我正在链接库。使用 ${SDL2_LIBRARIES}
的链接在这里不起作用,可能是因为我没有使用包含所有路径的 find_package
。我没有使用 find_package
,因为我想从头开始构建 SDL2,而不是为 Windows 和 Mac 传递二进制文件,并使用 apt 在 linux 中安装 SDL2。我应该怎么做才能允许使用通用方法来查找 SDL2 库而无需提供二进制文件?
当使用 add_subdirectory
方法构建其他库时,首选 link 使用库 target,而不是 file.
如果你查看 SDL2 的 CMakeLists.txt,你会发现 static 库目标的名称是 SDL2-static
,因此你需要 link 用它代替 SDL2
.
你会使用 find_package()
方法(使用预安装的二进制文件),静态 SDL2 库目标的名称将是 SDL2::SDL2-static
(前缀 XXX::
表示目标是一个已导入一个)。
我想让自己成为图形的跨平台设置。我正在尝试使用 cmake 构建 SDL2。这是我目前的 CMakeLists.txt :
cmake_minimum_required(VERSION 3.5.0 FATAL_ERROR)
set(PROJECT_NAME "OpenGLZero")
set(SDL2_DIR "external/SDL2-2.0.9")
set(GLEW_SOURCE_DIR "external/glew-2.1.0")
set(GLM_SOURCE_DIR "external/glm-0.9.9.3")
set(BUILD_SHARED_LIBS OFF CACHE BOOL "")
find_package(OpenGL REQUIRED)
add_subdirectory(${SDL2_DIR})
include_directories(${GLEW_SOURCE_DIR}/include
${GLM_SOURCE_DIR}
${SDL2_DIR}/include)
# building glew as a static library
add_library(glew STATIC
${GLEW_SOURCE_DIR}/src/glew.c
${GLEW_SOURCE_DIR}/include)
add_definitions(-DGLEW_STATIC)
add_executable(${PROJECT_NAME} src/main.cpp)
target_link_libraries(${PROJECT_NAME} SDL2main SDL2 ${OPENGL_LIBRARY} glew)
无法在 windows 上找到 SDL2.dll
文件(存在于 build\external\SDL2-2.0.9\Release\
中),尽管我正在链接库。使用 ${SDL2_LIBRARIES}
的链接在这里不起作用,可能是因为我没有使用包含所有路径的 find_package
。我没有使用 find_package
,因为我想从头开始构建 SDL2,而不是为 Windows 和 Mac 传递二进制文件,并使用 apt 在 linux 中安装 SDL2。我应该怎么做才能允许使用通用方法来查找 SDL2 库而无需提供二进制文件?
当使用 add_subdirectory
方法构建其他库时,首选 link 使用库 target,而不是 file.
如果你查看 SDL2 的 CMakeLists.txt,你会发现 static 库目标的名称是 SDL2-static
,因此你需要 link 用它代替 SDL2
.
你会使用 find_package()
方法(使用预安装的二进制文件),静态 SDL2 库目标的名称将是 SDL2::SDL2-static
(前缀 XXX::
表示目标是一个已导入一个)。