2016-08-06 3 views
-1

Я вообще совсем не знаком с CMake и C++ в целом, поэтому сегодня я попытался импортировать внешнюю библиотеку, такую ​​как SFML, в мой проект в IDE CLion Jetbrain, но без везения.Невозможно включить заголовочные файлы SFML в проект CLION

Проведя целый день, познакомившись с CMake в целом и сделав работу SFML с CMake в частности, я, наконец, смог запустить CMake моего проекта, чтобы найти файлы библиотеки SFML.
Однако, когда я подошел к собственному заголовочному файлу, чтобы включить заголовок SFML, я столкнулся с проблемой, поскольку он не нашел заголовков из библиотеки. И под этим я имею в виду директивы #include.
Поскольку я новичок, я здесь совсем потерялся.

Вот мой CMakeLists.txt файл:

# Set CMake's minimum required version 
cmake_minimum_required(VERSION 3.5) 

set(CMAKE_VERBOSE_MAKEFILE on) 

#Set CMake's project name 
project(testproj) 

include_directories("${PROJECT_BINARY_DIR}") 

#Set CMake's flags 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

#Set source files 
set(SOURCE_FILES Animal.cpp Animal.hpp ConstantValues.hpp Enums.hpp Mamal.hpp Mammals/Lion.cpp Mammals/Lion.hpp) 
add_library(testproj SHARED ${SOURCE_FILES}) 

#Set CMake's module path to find the SFML Lib 
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/Modules/" ${CMAKE_MODULE_PATH}) 
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "C:\\SFML\\SFML-2.3.2") 

#Find the SFML lib 
find_package(SFML 2 REQUIRED audio) 
if (SFML_FOUND) 
    include_directories(${SFML_INCLUDE_DIR}) 
    target_link_libraries(testproj ${SFML_LIBRARIES}) 
endif (SFML_FOUND) 

Стоит отметить, что я работаю на Windows, и я смотрю только для аудио модуля в SFML.
Что мне не хватает?

+0

'Я столкнулся с проблемой, поскольку он не нашел заголовков из библиотеки.' - Что это значит? 'find_package' терпит неудачу? Либо директива '# include' терпит неудачу? В последнем случае, какое точное сообщение об ошибке? – Tsyvarev

+0

@ Цыварев Я редактировал сообщение - я имел в виду директивы #include. В нем нет специального сообщения об ошибке, просто нет такого файла или каталога. –

+0

** Точная ошибка сообщение **, пожалуйста. Поскольку 'find_package (SFML)' не возвращает ошибку, он работает правильно. Таким образом, либо установка SFML нарушена, либо вы используете неправильную директиву '# include'. – Tsyvarev

ответ

1

OK Так что мне удалось с этим справиться благодаря помощи Цыварева. Когда я понял, что проблема связана только с директивами #include, а не с сценарием CMake, я немного глубже взглянул на нее и выяснил, что это противоречит официальной документации SFML, файлы заголовков для каждого модуля расположены под их соответствующий каталог.

Так, например, чтобы включить заголовочный файл звукового модуля, я должен сделать это:

#include <SFML/Audio/sound.hpp> 

Ключ здесь, чтобы посмотреть в папке SFML первый, так же, как вы могли бы сделать с повышением.

Смежные вопросы