缺少cmake的sfml库

时间:2017-02-04 00:57:32

标签: c++ cmake sfml clion

C ++ newbie here,我正在尝试为CLion(Win 10)实现SFML库。

我遵循了这个http://www.sfml-dev.org/tutorials/2.0/compile-with-cmake.php指南并使用cmake gui和mingw安装了sfml。

现在,当我尝试将SMF库包含在CMakeLists.txt项目

中时
cmake_minimum_required(VERSION 3.6)
project(untitled2)
set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)
add_executable(untitled2 ${SOURCE_FILES})

set(CMAKE_MODULE_PATH "C:/Program Files (x86)/SFML/cmake/Modules"${CMAKE_MODULE_PATH})

set(SFML_STATIC_LIBRARIES TRUE)
find_package(SFML COMPONENTS graphics window system REQUIRED)
include_directories(${SFML_INCLUDE_DIR})
target_link_libraries(First ${SFML_Libraries})

但是,我收到了错误

CMake Error at C:/Program Files (x86)/SFML/cmake/Modules/FindSFML.cmake:355 (message):
  SFML found but some of its dependencies are missing ( FreeType libjpeg)
Call Stack (most recent call first):
CMakeLists.txt:13 (find_package)

但我认为这些库包含在Windows中。我做错了什么?如果我要下载它们,我应该在哪里放置FreeType和libjpeg文件?

1 个答案:

答案 0 :(得分:1)

您不应在CMakeLists.txt中设置任何本地特定于系统的内容(例如路径)。这违背了构建系统的整个目的。

首先,我建议你在项目中创建一个子目录“cmake”,然后在那里复制SFML的FindSFML.cmake模块。

然后相应地更新CMAKE_MODULE_PATH

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)

这将确保找到该模块。总是找到CMake的默认模块,您不必保留变量的先前值(无论如何通常应为空)。

接下来,在创建实际项目文件时,您只需将SFML_ROOT传递给CMake,例如:

cmake "-DSFML_ROOT=C:/Program Files (x86)/SFML" path/to/source

以类似的方式,您不应在SFML_STATIC_LIBRARIES中设置CMakeLists.txt,除非您以某种方式被迫使用静态库。所以我实际上也将它添加到命令行:

cmake "-DSFML_ROOT=C:/Program Files (x86)/SFML" -DSFML_STATIC_LIBRARIES=TRUE path/to/source

您只需设置一次,稍后就会存储在CMakeCache.txt文件中。

最后但同样重要的是,如果您想支持使用SFML的静态链接,您还必须链接SFML的依赖项:

target_link_libraries(First ${SFML_LIBRARIES} ${SFML_DEPENDENCIES})

请注意,所有这些都无法解决您收到的错误消息。由于某些原因,SFML的预建依赖关系不在C:\Program Files (x86)\SFML\lib中。你确定你有正确的预建包吗?