在CMake中,FindSDL2出了什么问题?

14

我在我的游戏中使用SDL2。由于标准CMake中没有一个自定义的FindSDL2.cmake,因此我一直在使用它。然而,前段时间出现了一些有关FindSDL2的帖子,例如:Reddit post

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

find_package(SDL2 REQUIRED)

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

它发生了什么?


1
你能展示一下你的CMakeLists.txt吗? 至少在cmake 3.12.1中可以找到FindSDL2。 - ShadowMitia
2个回答

12

在CMake中从未出现过FindSDL2。 根据pull request #149中的拒绝原因,SDL2附带了一个SDL2Config.cmake,它提供了一个cmake packagefind_package的文档说明如下:find_package(SDL2)将按以下方式执行:

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

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

一旦你成功地 find_package(SDL2),以下目标就可以在target_link_libraries中使用:

SDL2::SDL2main
SDL2::SDL2
SDL2::SDL2-static

在我的Ubuntu中,我只能找到/usr/lib/x86_64-linux-gnu/cmake/SDL2/sdl2-config.cmake - val is still with Monica
从文档中: 给定名称Foo,它会查找名为FooConfig.cmakefoo-config.cmake的文件。我也在答案中添加了第二种形式。 - Botje

6

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

因此,你只需要执行以下操作即可集成SDL2库:

  1. 将SDL2 CMake modules克隆到你的项目中:
git clone https://github.com/aminosbh/sdl2-cmake-modules cmake/sdl2
  1. 在您的主要CMakeLists.txt中添加以下行:
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/sdl2)
find_package(SDL2 REQUIRED)
target_link_libraries(${PROJECT_NAME} SDL2::Main)

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

cmake .. -DSDL2_PATH="/path/to/sdl2"

请阅读README.md文件获取更多详情。
这是一个SDL2样本和项目列表:https://github.com/aminosbh/sdl-samples-and-projects


很抱歉在这里提问,因为您的github和stackoverflow没有私信功能。设置SDL2路径时遇到问题` -DSDL2_PATH=C:\Library\SDL2-- 找不到 . (缺少:SDL2_LIBRARY) (找到版本“2.0.12”) -- 找到SDL2main:C:/Library/SDL2/lib/libSDL2main.a(找到版本“2.0.12”)` - user3220058
该仓库已经更新了4年,他们是否仍然使用最新的SDL2版本? - Jeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接