我在我的游戏中使用SDL2。由于标准CMake中没有一个自定义的FindSDL2.cmake,因此我一直在使用它。然而,前段时间出现了一些有关FindSDL2的帖子,例如:Reddit post。
如果你的CMake足够新,并且它有FindSDL2.cmake文件,那么你可以这样做:
find_package(SDL2 REQUIRED)
当我下载最新的 CMake(3.13.2)时,它不包括 FindSDL2.cmake
。
它发生了什么?
我在我的游戏中使用SDL2。由于标准CMake中没有一个自定义的FindSDL2.cmake,因此我一直在使用它。然而,前段时间出现了一些有关FindSDL2的帖子,例如:Reddit post。
如果你的CMake足够新,并且它有FindSDL2.cmake文件,那么你可以这样做:
find_package(SDL2 REQUIRED)
当我下载最新的 CMake(3.13.2)时,它不包括 FindSDL2.cmake
。
它发生了什么?
在CMake中从未出现过FindSDL2。
根据pull request #149中的拒绝原因,SDL2附带了一个SDL2Config.cmake
,它提供了一个cmake package。
find_package
的文档说明如下:find_package(SDL2)
将按以下方式执行:
FindSDL2.cmake
,如果存在则使用它。(模块模式)SDL2Config.cmake
或sdl2-config.cmake
中的信息。(配置模式)简而言之,请确保您的SDL2软件包已安装SDL2Config.cmake
文件,并且该文件位于您的CMAKE_PREFIX_PATH
上。文档列出了它查找的确切路径和前缀。
一旦你成功地 find_package(SDL2)
,以下目标就可以在target_link_libraries
中使用:
SDL2::SDL2main
SDL2::SDL2
SDL2::SDL2-static
/usr/lib/x86_64-linux-gnu/cmake/SDL2/sdl2-config.cmake
。 - val is still with MonicaFooConfig.cmake
或foo-config.cmake
的文件。我也在答案中添加了第二种形式。 - Botje为了轻松地集成SDL2库,我开发了跨平台的现代CMake模块(传送门),可以用于查找和使用SDL2库以及其他相关库:
因此,你只需要执行以下操作即可集成SDL2库:
git clone https://github.com/aminosbh/sdl2-cmake-modules cmake/sdl2
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
-- 找不到 . (缺少:SDL2_LIBRARY) (找到版本“2.0.12”)
-- 找到SDL2main:C:/Library/SDL2/lib/libSDL2main.a(找到版本“2.0.12”)
` - user3220058