将sfml与cmake连接(Windows MinGW)

时间:2017-08-14 09:22:40

标签: cmake linker sfml

我似乎无法使用SFMLcmake链接到我的可执行文件。

的CMakeLists.txt:

cmake_minimum_required(VERSION 3.0.0)
project(Tut3)

set(LIBS_DIR ~/../../Libraries)

add_executable(Tut3 main.cpp)

set(CMAKE_MODULE_PATH ${LIBS_DIR}/sfml/cmake/Modules)
find_package(SFML REQUIRED system window graphics)
target_link_libraries(Tut3 ${SFML_LIBRARIES})

运行cmake时遇到的错误:

  

C语言中的CMake错误:/ Library/sfml/cmake/Modules/FindSFML.cmake:355   (消息):找不到SFML(缺少:SFML_SYSTEM_LIBRARY   SFML_WINDOW_LIBRARY SFML_GRAPHICS_LIBRARY)

     

调用堆栈(最近一次调用):CMakeLists.txt:9(find_package)

sfml目录包含一个32位MinGW编译的sfml存储库。我正在使用Windows。我使用的cmake命令是:

cmake -G "MinGW Makefiles" ..dir..

1 个答案:

答案 0 :(得分:1)

寻找SFML的模块不会相对于自己的位置。相反,它会尝试一些常见的路径(非Windows系统)以及一些特定的变量来尝试找到实际的库。

要解决这个问题,你应该做两件事:

  • FindSFML.cmake脚本移动到您自己项目的子目录中,例如cmake/FindSFML.cmake并相应调整CMAKE_MODULE_PATH值。
  • 添加一个新的CMake变量SFML_ROOT,指向您安装SFML的目录(在您的情况下为C:/Libraries/sfml)。这不应该在CMakeLists.txt文件中进行硬编码,而是在调用CMake时传递一次(即cmake -DSFML_ROOT=C:/...;这将保存在缓存中)。

CMakeLists.txt的结构也存在一些问题。你应该改用它:

cmake_minimum_required(VERSION 3.0.0)
project(Tut3)

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) # Tell CMake where to find the module
find_package(SFML REQUIRED COMPONENTS graphics window system) # Look for SFML

include_directories(${SFML_INCLUDE_DIR}) # You forgot this line above; add SFML's include dir
add_executable(Tut3 main.cpp) # Define the target

target_link_libraries(Tut3 ${SFML_LIBRARIES} ${SFML_DEPENDENCIES}) # Link SFML and dependencies