В настоящее время я пытаюсь настроить свой файл Cmake для включения библиотек SFML. Мой CMakeLists.txt. Я использую OS X Yosemite, если это вообще имеет значение.
cmake_minimum_required(VERSION 2.8.4)
project(SFMLTest)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=lib++")
set(SOURCE_FILES main.cpp)
add_executable(SFMLTest ${SOURCE_FILES})
#Detect and add SFML
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/Users/Home/SFML-2.2-osx-clang-universal/cmake/Modules" ${CMAKE_MODULE_PATH})
find_package(SFML 2.2 REQUIRED system window graphics network audio)
if (SFML_FOUND)
include_directories(${SFML_INCLUDE_DIR})
target_link_libraries(${main.cpp} ${SFML_Libraries})
endif()
И ошибка, которую я сейчас получаю,
Error:By not providing "FindSFML.cmake" in CMAKE_MODULE_PATH this project has asked
CMake to find a package configuration file provided by "SFML", but CMake did notfind one.
Could not find a package configuration file provided by "SFML" (requested version 2.2)
with any of the following names:
SFMLConfig.cmake sfml-config.cmake
Add the installation prefix of "SFML" to CMAKE_PREFIX_PATH or
set "SFML_DIR"to a directory containing one of the above files.
If "SFML" provides a separate development package or SDK, be sure it has been installed.
Мой FindSFML.cmake находится по адресу
/Users/Home/SFML-2.2-osx-clang-universal/cmake/Modules
2 ответа
В вашем вопросе говорится, что полный путь к модулю поиска
/Users/Home/SFML-2.2-osx-clang-universal/cmake/Modules/FindSFML.cmake
Но вы добавляете ${CMAKE_SOURCE_DIR}/Users/Home/SFML-2.2-osx-clang-universal/cmake/Modules
в свой CMAKE_MODULE_PATH
. ${CMAKE_SOURCE_DIR}
- это абсолютный путь к каталогу, содержащему файл верхнего уровня CMakeLists.txt
. Если вам известен абсолютный путь к файлу модуля, который вы хотите включить, вам, безусловно, не следует указывать перед ним путь к исходному дереву. Просто измените строку на эту:
set(CMAKE_MODULE_PATH "/Users/Home/SFML-2.2-osx-clang-universal/cmake/Modules" ${CMAKE_MODULE_PATH})
Также обратите внимание, что, поскольку вы указали REQUIRED
среди аргументов для find_package()
, CMake завершит работу с ошибкой, если пакет не может быть найден. Поэтому иметь if(SFML_FOUND)
бессмысленно.
Это решение идеально подходит: https://oxymeos.shost.ca/article.php?about = work_with_the_SFML_in_CLion. Я рекомендую это! Это сработало для меня
Вы создаете папку с именем «cmake_modules» в корне проекта и помещаете в эту папку файл «FindSFML.cmake» (в Windows и Mac OS X: «[Your_SFML Location] /cmake/Modules/FindSFML.cmake», и в Linux: «[Your_SFML_location] /share/SFML/cmake/Modules/FindSFML.cmake».
Затем файл конфигурации CMake (CMakeLists.txt) представлен в следующей форме:
cmake_minimum_required(VERSION 3.7)
project([your_project])
# Define the source and the executable
set(EXECUTABLE_NAME "[name_executable]")
add_executable(${EXECUTABLE_NAME} [project_files])
# Detect and add SFML
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}" ${CMAKE_MODULE_PATH})
find_package(SFML 2 REQUIRED system window graphics network audio)
if(SFML_FOUND)
include_directories(${SFML_INCLUDE_DIR})
target_link_libraries(${EXECUTABLE_NAME} ${SFML_LIBRARIES})
endif()
Похожие вопросы
Новые вопросы
cmake
CMake - это кроссплатформенный генератор систем с открытым исходным кодом. Он генерирует файлы для систем сборки, такие как собственные make-файлы, ninja-build и файлы проектов для нескольких интегрированных сред разработки.