Как исправить cmake find_package "Не удалось найти SDL2" в Windows? - PullRequest
1 голос
/ 27 марта 2019

Я работаю над небольшим проектом, использующим SDL2, и использую cmake для сборки и компиляции кода, чтобы он работал на разных платформах (в основном, windows и linux). Сейчас у меня проблемы с поиском библиотеки SDL2 с помощью функции find_package в Windows.

Я уже реализовал свой собственный файл 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

Любая помощь приветствуется!

1 Ответ

1 голос
/ 27 марта 2019

ниже ссылка FindSDL2.cmake для Unix и Mingw.Итак, если вы запускаете ваш 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

и укажите путь к папке, где установлена ​​или существовала ваша библиотека.

...