【问题标题】:How to fix cmake find_package "Could NOT find SDL2" on windows?如何在 Windows 上修复 cmake find_package“找不到 SDL2”?
【发布时间】:2019-03-27 05:22:26
【问题描述】:

我正在使用 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)

并使用了在这里找到的 FindSDL2.cmake https://github.com/brendan-w/collector/blob/master/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

感谢任何帮助!

【问题讨论】:

    标签: c++ windows cmake sdl-2


    【解决方案1】:

    下面的链接 FindSDL2.cmake 适用于 unix 和 mingw。 所以,如果你在window平台上运行你的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

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

    【讨论】:

      猜你喜欢
      • 2016-01-19
      • 2018-02-06
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 2022-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多