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文件?
答案 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
中。你确定你有正确的预建包吗?