2017-02-04 5 views
1

C++ Neuling hier, ich versuche, SFML-Bibliothek für CLion (Win 10) zu implementieren.Fehlende sfml-Bibliotheken für cmake

Ich folgte dieser http://www.sfml-dev.org/tutorials/2.0/compile-with-cmake.php Richtlinien und installiert SFML mit cmake GUI und Mingw.

Jetzt, wenn ich versuche SMF-Bibliotheken enthalten in CMakeLists.txt

cmake_minimum_required(VERSION 3.6) 
project(untitled2) 
set(CMAKE_CXX_STANDARD 11) 

set(SOURCE_FILES main.cpp) 
add_executable(untitled2 ${SOURCE_FILES}) 

set(CMAKE_MODULE_PATH "C:/Program Files (x86)/SFML/cmake/Modules"${CMAKE_MODULE_PATH}) 

set(SFML_STATIC_LIBRARIES TRUE) 
find_package(SFML COMPONENTS graphics window system REQUIRED) 
include_directories(${SFML_INCLUDE_DIR}) 
target_link_libraries(First ${SFML_Libraries}) 

Howewer zu projizieren, ich bin immer einen Fehler

CMake Error at C:/Program Files (x86)/SFML/cmake/Modules/FindSFML.cmake:355 (message): 
    SFML found but some of its dependencies are missing (FreeType libjpeg) 
Call Stack (most recent call first): 
CMakeLists.txt:13 (find_package) 

Aber ich dachte, diese Libs in Windows enthalten sind. Ich mache etwas falsch? Wo sollte ich FreeType und libjpeg Dateien platzieren, wenn ich sie herunterladen möchte?

Antwort

0

Sie sollten keine lokalen systemspezifischen Dinge (wie Pfade) in Ihrem CMakeLists.txt setzen. Dies vereitelt den gesamten Zweck eines Build-Systems.

Zuerst würde ich vorschlagen, Sie erstellen ein Unterverzeichnis "cmake" in Ihrem Projekt und kopieren SFML FindSFML.cmake Modul dort.

Dann aktualisieren Sie Ihre CMAKE_MODULE_PATH entsprechend:

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) 

Dadurch wird sichergestellt, das Modul zu finden ist. Die Standardmodule von CMake werden immer gefunden, Sie müssen den vorherigen Wert der Variablen nicht beibehalten (sollte normalerweise sowieso leer sein).

Als nächstes, wenn Ihre tatsächlichen Projektdateien erstellen, werden Sie nur SFML_ROOT zu CMake passieren müssen, zum Beispiel:

cmake "-DSFML_ROOT=C:/Program Files (x86)/SFML" path/to/source 

In ähnlicher Weise werden Sie nicht SFML_STATIC_LIBRARIES in Ihrem CMakeLists.txt es sei denn, Sie setzen sollten bin irgendwie gezwungen, statische Bibliotheken zu benutzen. Also würde ich eigentlich, dass Linie auf den Befehl als auch hinzufügen:

cmake "-DSFML_ROOT=C:/Program Files (x86)/SFML" -DSFML_STATIC_LIBRARIES=TRUE path/to/source 

Sie müssen nur diese einmal festgelegt, sind sie später in Ihrer CMakeCache.txt-Datei gespeichert.

Last but not least, wenn Sie statische Linken mit SFML unterstützen möchten, werden Sie auch SFML die Abhängigkeiten verknüpfen müssen:

target_link_libraries(First ${SFML_LIBRARIES} ${SFML_DEPENDENCIES}) 

Beachten Sie, dass diese alle nicht den Fehler beheben Nachricht, die du bekommst. Aus irgendeinem Grund sind die vorgefertigten Abhängigkeiten von SFML nicht in C:\Program Files (x86)\SFML\lib. Sind Sie sicher, dass Sie das richtige vorgefertigte Paket haben?