【问题标题】:linking sfml with cmake (Windows MinGW)将 sfml 与 cmake 链接(Windows MinGW)
【发布时间】:2018-01-22 02:27:13
【问题描述】:

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

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:/Libraries/sfml/cmake/Modules/FindSFML.cmake:355 处的 CMake 错误 (消息):找不到 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..

【问题讨论】:

  • 你应该先编译 SFML,然后将 CMake 指向 SFML 的 install 目录,而不是它的源。

标签: cmake linker sfml


【解决方案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

【讨论】:

  • 您的答案有效(或者至少它使 cmake 找到了库......我仍然有一些我必须弄清楚的更喜欢的错误)但是您描述的过程适用于所有 FindXXX 脚本,或者是 sfml 特有的“SFML_ROOT 变量方法”吗?
  • 具体。作为替代方案,将 SFML 安装到 <current drive>/usr 并且应该启动提到的 Linux 路径。
猜你喜欢
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 2021-09-16
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多