如何在使用cmake的项目构建过程中构建SDL2?

时间:2019-02-15 21:02:18

标签: c++ cmake sdl-2

我想使自己成为图形的跨平台设置。我正在尝试使用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库的通用方法?

1 个答案:

答案 0 :(得分:3)

使用add_subdirectory方法构建其他库时,最好链接到库 target ,而不是 file

如果查看SDL2的CMakeLists.txt,则会发现 static 库目标的名称为SDL2-static,因此需要与其链接而不是{{ 1}}。


如果您使用SDL2方法(具有预安装的二进制文件),则静态SDL2库目标的名称将为find_package()(前缀SDL2::SDL2-static表示目标是导入一个)。