我对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中的音频模块。
我错过了什么?
答案 0 :(得分:1)
好的所以,由于@ Tsyvarev的帮助,我已经成功地完成了这项任务。 当我意识到问题只与#include指令而不是CMake脚本有关时,我对它进行了深入研究,发现与SFML的官方文档相反,每个模块的头文件都位于在其匹配目录下。
所以例如要包含音频模块的头文件,我应该这样做:
#include <SFML/Audio/sound.hpp>
这里的关键是首先查看SFML文件夹,就像使用boost一样。