我似乎无法使用SFML
将cmake
链接到我的可执行文件。
的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..
答案 0 :(得分:1)
寻找SFML的模块不会相对于自己的位置。相反,它会尝试一些常见的路径(非Windows系统)以及一些特定的变量来尝试找到实际的库。
要解决这个问题,你应该做两件事:
FindSFML.cmake
脚本移动到您自己项目的子目录中,例如cmake/FindSFML.cmake
并相应调整CMAKE_MODULE_PATH
值。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