簡體   English   中英

用 cmake 創建一個使用 SDL 的庫

[英]Make a library with cmake that use the SDL

我正在嘗試在 SDL2 之上創建一個庫。 對於編譯,我使用的是 cmake。首先,我為庫提供了這個CMakeLists.txt

cmake_minimum_required(VERSION 3.10)

project(SquareEngine)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")

find_package(SDL2 REQUIRED)
find_package(SDL2_image REQUIRED)

include_directories(${SDL2_INCLUDE_DIRS})
include_directories(${SDL2_IMAGE_INCLUDE_DIRS})

set (SRCS   Main.cpp
        Rectangle.cpp
        Scene.cpp
        SquareEngine.cpp)

set (HEADERS    Rectangle.hpp
        Scene.hpp
        SquareEngine.hpp
        utils/Color.hpp
        utils/Vector.hpp)

add_library(SquareEngine ${SRCS} ${HEADERS} ${SDL} ${SDL_SRC})
target_link_libraries(SquareEngine ${SDL2_LIBRARIES} ${SDL2_IMAGE_LIBRARIES})

要包含 SDL2 和 SDL2 圖像,我遵循此說明

當我嘗試構建它時,它工作得很好。

現在我嘗試在項目中使用我的庫。 我創建了自己的項目,並鏈接了位於項目子文件夾/SquareEngine中的庫。 對於我使用這個CMakeLists.txt的項目:

cmake_minimum_required(VERSION 3.10)

project(Demo)


set (SRCS Main.cpp)
add_subdirectory(SquareEngine)
add_executable(Demo ${SRCS})
target_link_libraries(Demo PUBLIC SquareEngine)
target_include_directories(Demo PUBLIC SquareEngine)

當我嘗試構建項目時出現這樣的錯誤: Cannot open include file: 'SDL.h': No such file or directory

我試圖弄清楚很長一段時間,但我不知道為什么。

也許使用 static 中的 SDL 比共享更好?

我認為您需要將 SDL include 目錄添加到 SquareEngine 庫中:

target_include_directories(SquareEngine PUBLIC ${SDL2_INCLUDE_DIRS} ${SDL2_IMAGE_INCLUDE_DIRS})

最新的 SDL2 版本提供了SDL2::* CMake 目標,因此您無需再擺弄 CMake 變量。 因此,不再需要運送您的自定義FindSDL2.cmake和/或FindSDL2_image.cmake模塊。

有了這些,您可以將 cmake 腳本重寫為:

cmake_minimum_required(VERSION 3.10)
project(SquareEngine)

find_package(SDL2 REQUIRED CONFIG)
find_package(SDL2_image REQUIRED CONFIG)

set (SRCS
    Main.cpp
    Rectangle.cpp
    Scene.cpp
    SquareEngine.cpp
)

set (HEADERS
    Rectangle.hpp
    Scene.hpp
    SquareEngine.hpp
    utils/Color.hpp
    utils/Vector.hpp
)

add_library(SquareEngine ${SRCS} ${HEADERS})
target_link_libraries(SquareEngine PRIVATE SDL2::SDL2 SDL2_image::SDL2_image)
target_include_directories(SquareEngine
    PUBLIC
        $<TARGET_PROPERTY:SDL2::SDL2,INTERFACE_INCLUDE_DIRECTORIES>
        $<TARGET_PROPERTY:SDL2_image::SDL2_image,INTERFACE_INCLUDE_DIRECTORIES>
        "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
)

然后它可以在您的游戲中用作:

cmake_minimum_required(VERSION 3.10)
project(Demo)

set (SRCS Main.cpp)
add_subdirectory(SquareEngine)
add_executable(Demo ${SRCS})
target_link_libraries(Demo PUBLIC SquareEngine)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM