【问题标题】:How can I link a library with SDL2 in CMake? [duplicate]如何在 CMake 中将库与 SDL2 链接? [复制]
【发布时间】:2021-01-30 13:13:23
【问题描述】:

我打算用 C++ 编写一个小型 2D 游戏引擎,使用 SDL2 进行渲染。我想为 SDL2 编写一个包装库,以使其更易于自己使用。如何使用 CMake 将此库与 SDL2 链接?

【问题讨论】:

标签: c++ cmake


【解决方案1】:

所以您希望您的应用程序像这样链接到包装库:

Application  -->  Wrapper lib  -->  Actual lib

步骤如下:

1。找到实际的库

尝试以最简单的方式在您的系统上找到已安装的库:

find_package(SDL2 REQUIRED)

对于较新的 cmake 版本应该足够了。对于旧版本 - 请参阅有关如何使用 CMake 定位 SDL2 的链接问题。

2。为该库创建一个伪目标

第一步留下了裸cmake变量SDL2_INCLUDE_DIRSSDL2_LIBRARIES。虽然可以按原样使用它们,但将它们组合在一个目标中会更方便,并通过 CMakeLists.txt 文件的其余部分使用该目标。为外部库创建 INTERFACE 目标比创建 IMPORTED 目标要容易一些,因此:

add_library               (external.sdl2 INTERFACE)
target_include_directories(external.sdl2 INTERFACE ${SDL2_INCLUDE_DIRS})
target_link_libraries     (external.sdl2 INTERFACE ${SDL2_LIBRARIES})

现在,每次您将 anything 链接到目标 external.sdl2 时,都会自动拉入包含目录和实际库。

3。定义包装库的目标

add_library(my_wrapper STATIC
    my_wrapper.cpp
)

target_link_libraries(my_wrapper
    external.sdl2
)

注意:您不再需要明确的include_directories

4。为您的主要可执行文件定义目标

add_executable(my_game
    my_game.cpp
)

target_link_libraries(my_game
    my_wrapper
)

同样,您不必在目标库中提及 SDL2,而不是包含目录;它们将被隐式添加,因为 my_wrapper 目标使用它。

附:既然这是一个 C++ 项目,为什么不使用 SDL2PP,即 SDL2 上的 C++ 包装器?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    相关资源
    最近更新 更多