如何修复Windows上的cmake find_package“找不到SDL2”?

时间:2019-03-27 05:22:26

标签: c++ windows cmake sdl-2

我正在使用SDL2进行一个小项目,并且正在使用cmake来构建和编译代码,以便它可以在不同的平台(主要是Windows和Linux)上运行。现在,我在Windows上使用find_package函数无法找到SDL2库。

我已经基于几个博客实现了自己的FindSDL2.cmake文件,这些博客链接到与此问题类似的问题,但是仍然找不到SDL2库。

我看到的另一个解决方案是将SDL2的安装路径传递到CMAKE_PREFIX_PATH,但是除非我丢失了某些东西,否则这意味着如果我将代码放在github上并且有人想要构建它来运行它本身,他们还必须通过安装SDL2的路径,这似乎有点烦人,而且不是其他类似的开源项目正在做的事情。

这是我的CMakeLists.txt文件

cmake_minimum_required(VERSION 3.0.0)
project(Generic-Fighting-Game VERSION 0.1.0)

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

include(CTest)
enable_testing()

find_package(SDL2 REQUIRED)

include_directories("${SDL2_INCLUDE_DIR}")

add_executable(Generic-Fighting-Game src/main.cpp)
target_link_libraries(Generic-Fighting-Game ${SDL2_LIBRARY})

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

并使用了https://github.com/brendan-w/collector/blob/master/cmake/FindSDL2.cmake在这里找到的FindSDL2.cmake文件,因为我对cmake不够了解,无法创建自己的FindSDL2.cmake文件

在构建目录上运行make时,出现以下错误

C:\Users\HP\Documents\Generic-Fighting-Game\build>make
CMake Error at C:/Program Files/CMake/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find SDL2 (missing: SDL2_LIBRARY SDL2_INCLUDE_DIR)
Call Stack (most recent call first):
  C:/Program Files/CMake/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  cmake/FindSDL2.cmake:163 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:9 (find_package)


-- Configuring incomplete, errors occurred!
See also "C:/Users/HP/Documents/Generic-Fighting-Game/build/CMakeFiles/CMakeOutput.log".
See also "C:/Users/HP/Documents/Generic-Fighting-Game/build/CMakeFiles/CMakeError.log".
Makefile:604: recipe for target 'cmake_check_build_system' failed
make: *** [cmake_check_build_system] Error 1

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

下面的链接FindSDL2.cmake用于Unix和mingw。 因此,如果您在Windows平台上运行cmake,并且可能未使用mingw,则路径错误,这表示不是Windows格式。所以cmake找不到库。

https://github.com/brendan-w/collector/blob/master/cmake/FindSDL2.cmake

SET(SDL2_SEARCH_PATHS
    ~/Library/Frameworks
    /Library/Frameworks
    /usr/local
    /usr
    /sw # Fink
    /opt/local # DarwinPorts
    /opt/csw # Blastwave
    /opt
)

因此,使其变通。

设置窗口路径,例如C:\ ProgramData \ Microsoft

并设置库安装路径或存在路径的路径位置。