2017-09-23 7 views
0

Quand je tente de lancer cmake pour construire un projet où j'inclure la bibliothèque SFML je reçois l'erreur suivante: SFML found but version too low (requested: 2.4, found: 1.x.x)compilation SFML avec CMake et MinGW sous Windows

Je téléchargé que la source de la nouvelle version de la bibliothèque (SFML-2.4.2). J'exécute cmake (avec MinGW Makefiles) et compile les binaires dans le même dossier. J'ai copié le FindSFML dans un sous-dossier de mon projet. Après que j'avais la structure de dossier suivant

SFML-2.4.2\ 
    cmake\ 
    Modules\ 
     FindSFML.cmake 
    CMakeFiles 
    doc 
    ... 
    include 
    lib 
    src 
    .. 

sfml-games\ 
    tetris\ 
    cmake_modules\ 
     FindSFML.cmake 
    CMakeLists.txt 
    main.cpp 
    tetris-build 
    ... 

Mon CMakeLists.txt contient les choses suivantes:

project(Tetris) 
cmake_minimum_required(VERSION 2.8) 
aux_source_directory(. SRC_LIST) 

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake_modules") 
Find_package(SFML 2 REQUIRED system window graphics network audio) 

include_directories(${SFML_INCLUDE_DIR}) 

add_executable(${PROJECT_NAME} ${SRC_LIST}) 

target_link_libraries(${PROJECT_NAME} ${SFML_LIBRARY}) 

Je trouve que CMake est réglé sur l'entrée C:\Program Files (x86)\SFML CMAKE_INSTALL_PREFIX (que je n'obtiens pas) donc je mets la bibliothèque et le lib de SFML dans C: \ Program Files (x86) \ SFML. (qu'est-ce que CMAKE_INSTALL_PREFIX et dois-je vraiment toujours copier les dossiers de bibliothèque et lib dans mon C:\Program Files (x86)\ ??). Maintenant, mon cmake fonctionne, mais quand j'essaie de compiler le code, je reçois beaucoup de références non définies à '_imp __....'

Par ailleurs sur Linux, je viens d'installer SFML via sudo apt-get install libsfml-dev et cela fonctionne hors de la boîte .

Répondre

0

Vous confondez les choses. CMAKE_INSTALL_PREFIX est l'emplacement par défaut où mettre SFML lorsque vous générez la cible install (c'est-à-dire en cours d'exécution make install). Cela n'a rien à voir avec vos autres problèmes.

Vous n'avez pas besoin d'installer SFML (ou toute autre bibliothèque) quelque part sous C:\Program Files. C'est complètement à vous. Ce que j'ai trouvé plutôt bien est d'installer MinGW à C:\usr (ou de créer un lien symbolique vers votre dossier d'installation) et aussi d'utiliser ce chemin pour CMAKE_INSTALL_PREFIX lors de la construction de SFML. Ainsi, MinGW devrait se comporter comme vous le feriez à partir de Linux (c'est-à-dire ne pas avoir à spécifier de chemin pour les répertoires ou bibliothèques inclus, etc.). En ce qui concerne vos erreurs de référence non définies, vous devez créer une nouvelle question en ne demandant que celles-ci (et en inclure au moins quelques-unes), car elles n'ont rien à voir avec le répertoire d'installation.

À l'heure actuelle, je ne peux que deviner, mais c'est probablement parce que vous utilisez les mauvaises variables CMake pour l'éditeur de liens. Vous ne le remarquerez pas sur Linux, puisque SFML sera dans le chemin de recherche par défaut (ce qui arrivera aussi si vous utilisez C:\usr comme décrit ci-dessus).

Pour essayer la fixation, utilisez cette ligne:

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