CMake 中的 FindSDL2 发生了什么?

val*_*ica 8 cmake sdl-2

我在游戏中使用 SDL2。我一直在使用自定义 FindSDL2.cmake,因为标准 CMake 集中没有。但是,前段时间确实出现了有关 FindSDL2 的帖子。示例:Reddit 帖子

如果你的 cmake 足够新并且它有 FindSDL2.cmake 文件,你可以这样做:

find_package(SDL2 REQUIRED)
Run Code Online (Sandbox Code Playgroud)

但是当我下载最新的 CMake (3.13.2) 时,它不包含FindSDL2.cmake.

这是怎么回事?

Bot*_*tje 6

FindSDL2 从未出现在 CMake 中。根据拉取请求 #149 中的拒绝原因,SDL2 附带了一个SDL2Config.cmake,它提供了一个cmake 包find_package状态的文档find_package(SDL2)将如下所示:

  • 寻找FindSDL2.cmake,如果存在就使用它。(模块模式)
  • 否则,请使用SDL2Config.cmake或 中的信息sdl2-config.cmake。(配置模式)

简而言之,请确保您的 SDL2 软件包已安装该SDL2Config.cmake文件,并且该文件位于您的CMAKE_PREFIX_PATH. 该文档列出了它所查找的确切路径和前缀。


小智 6

为了轻松集成 SDL2 库,我开发了跨平台的现代 CMake 模块,用于查找和使用 SDL2 库以及其他相关库:

因此,为了集成 SDL2 库,您应该做的唯一事情是:

  1. 在项目中克隆 SDL2 CMake 模块:
git clone https://github.com/aminosbh/sdl2-cmake-modules cmake/sdl2
Run Code Online (Sandbox Code Playgroud)
  1. 在您的 main 中添加以下行CMakeLists.txt
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/sdl2)
find_package(SDL2 REQUIRED)
target_link_libraries(${PROJECT_NAME} SDL2::Main)
Run Code Online (Sandbox Code Playgroud)

注意:如果 CMake 没有找到 SDL2 库(在 Windows 中),我们可以指定 CMake 选项,SDL2_PATH如下所示:

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/sdl2)
find_package(SDL2 REQUIRED)
target_link_libraries(${PROJECT_NAME} SDL2::Main)
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请阅读 README.md 文件。
这是 SDL2 示例和项目的列表:https ://github.com/aminosbh/sdl-samples-and-projects