无法在CLion项目中包含SFML头文件

时间:2016-08-06 21:55:02

标签: c++ cmake header-files clion

我对CMake和C ++一般都很陌生,所以今天我尝试将一个像SFML这样的外部库导入我在Jetbrain的IDE 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中的音频模块。
我错过了什么?

1 个答案:

答案 0 :(得分:1)

好的所以,由于@ Tsyvarev的帮助,我已经成功地完成了这项任务。 当我意识到问题只与#include指令而不是CMake脚本有关时,我对它进行了深入研究,发现与SFML的官方文档相反,每个模块的头文件都位于在其匹配目录下。

所以例如要包含音频模块的头文件,我应该这样做:

#include <SFML/Audio/sound.hpp>

这里的关键是首先查看SFML文件夹,就像使用boost一样。