将 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
我似乎无法使用 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