将 sfml 与 cmake 链接(Windows MinGW)

linking sfml with cmake (Windows MinGW)

我似乎无法使用 cmake link SFML 我的可执行文件。

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:

时出现错误

CMake Error at C:/Libraries/sfml/cmake/Modules/FindSFML.cmake:355 (message): Could NOT find SFML (missing: SFML_SYSTEM_LIBRARY SFML_WINDOW_LIBRARY SFML_GRAPHICS_LIBRARY)

Call Stack (most recent call first): CMakeLists.txt:9 (find_package)

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

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

查找 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