Как собрать SDL2 во время сборки проекта с помощью cmake? - PullRequest
0 голосов
/ 16 февраля 2019

Я хочу сделать кроссплатформенную настройку для графики.Я пытаюсь собрать SDL2 с помощью cmake.Вот мой текущий 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)

Он не может найти файл SDL2.dll в Windows (присутствует в build\external\SDL2-2.0.9\Release\), хотя я связываю библиотеки.Связывание с использованием ${SDL2_LIBRARIES} здесь не работает, возможно, потому что я не использую find_package, который включает в себя все пути.Я не использую find_package, потому что я хочу собрать SDL2 с нуля вместо передачи двоичных файлов для Windows и Mac и установки SDL2 в Linux с помощью apt.Что я должен сделать, чтобы разрешить общий метод поиска библиотек SDL2 без предоставления двоичных файлов?

1 Ответ

0 голосов
/ 16 февраля 2019

При сборке другой библиотеки с подходом add_subdirectory предпочтительно связать ее с библиотекой target , а не с файлом .

Если вы посмотрите на SDL2 CMakeLists.txt , тогда вы найдете, что имя библиотеки static является SDL2-static, поэтому вам нужно связываться с ней вместо SDL2.


Если бы вы использовали подход find_package() (с предварительно установленными двоичными файлами), имя статической цели библиотеки SDL2 будет SDL2::SDL2-static (префикс XXX:: означает, что целью является IMPORTED один).

...