2017-08-14 178 views
0

我似乎無法使用cmake鏈接SFML到我的可執行文件。與cmake的鏈接SFML(視窗MinGW的)

的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的錯誤:/Libraries/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

你應該首先編譯SFML,然後將CMake指向SFML的** install **目錄,而不是它的源代碼。 – arrowd

回答

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 
+0

你的回答工作(或至少它讓cmake的找到圖書館...我仍然有我必須找出一些類似器錯誤),但你描述適用於所有的findxxx腳本程序,或者是「SFML_ROOT變量法」特定於sfml? – Dincio

+0

具體。作爲替代方案,將SFML安裝到'<當前驅動器>/usr',並且所提及的Linux路徑應該啓動。 – Mario