[英]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.