Cómo usar SDL2 y SDL_image con cmake

 C Programming >> Programación C >  >> Tags >> CMake
Cómo usar SDL2 y SDL_image con cmake

Creo que lo siguiente funcionará, ya que encuentra las bibliotecas en mi sistema ubuntu y la función de ejemplo que proporcionó puede vincular:

project(shooter-cmake2)

cmake_minimum_required(VERSION 2.8)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")

add_executable(${PROJECT_NAME} src/test.cpp)

INCLUDE(FindPkgConfig)

PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
PKG_SEARCH_MODULE(SDL2IMAGE REQUIRED SDL2_image>=2.0.0)

INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIRS} ${SDL2IMAGE_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${SDL2_LIBRARIES} ${SDL2IMAGE_LIBRARIES})

Si cmake se ejecuta con --debug-output genera:

-- Found PkgConfig: /usr/bin/pkg-config (found version "0.26") 
Called from: [2]    /usr/share/cmake-2.8/Modules/FindPkgConfig.cmake
            [1] $USER/stack-overflow/cmake-sdl2-image/CMakeLists.txt
-- checking for one of the modules 'sdl2'
Called from: [1]    $USER/stack-overflow/cmake-sdl2-image/CMakeLists.txt
-- checking for one of the modules 'SDL2_image>=2.0.0'
Called from: [1]    $USER/stack-overflow/cmake-sdl2-image/CMakeLists.txt

Esto me hizo comprobar el contenido de

/usr/lib/x86_64-linux-gnu/pkgconfig/sdl2.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/SDL2_image.pc

Me di cuenta de que SDL2_image.pc contiene el nombre:SDL2_image, que supuse que debería coincidir con el tercer parámetro de PKG_SEARCH_MODULE para esta biblioteca.


Hay dos publicaciones de blog sobre esto aquí:

Usando SDL2 con CMake

Usando SDL2_image con CMake

Básicamente necesitas un FindSDL2.cmake y FindSDL2_image.cmake módulo. Pueden basarse en los que funcionan para SDL 1.2 que ya están incluidos en CMake. El uso de estos módulos de búsqueda también funcionará en Windows.

Si está en Linux y solo necesita SDL2, ni siquiera necesita el FindSDL2.cmake como lo siguiente ya funciona:

cmake_minimum_required(VERSION 3.7)

project(SDL2Test)

find_package(SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIRS})

add_executable(SDL2Test Main.cpp)
target_link_libraries(SDL2Test ${SDL2_LIBRARIES})

Estaba teniendo problemas con estas respuestas, creo que cmake cambió la forma de importar objetivos. Siguiendo la publicación del blog de @trenki, necesitaba cambiar mi CMakeLists.txt a:

project(SDL2Test)
find_package(SDL2 REQUIRED COMPONENTS SDL2::SDL2)
add_executable(SDL2Test main.cpp)
target_link_libraries(SDL2Test SDL2::SDL2)

Actualmente, esto funciona de forma inmediata en Arch Linux.