我正在使用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
感谢您的帮助!
答案 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
并设置库安装路径或存在路径的路径位置。