繁体   English   中英

缺少 cmake 的 sfml 库

[英]Missing sfml libraries for cmake

C++ 新手,我正在尝试为 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 文件,我应该将它们放在哪里?

您不应在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

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

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 你确定你有正确的预建包吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM