Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Compilation SFML via CMake  (Lu 4707 fois)

0 Membres et 1 Invité sur ce sujet

MadMaXx

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Compilation SFML via CMake
« le: Mai 22, 2013, 07:33:08 pm »
Bonjour,

J’essaie de compiler SFML pour Qt Creator. Je suis le tuto, je télécharge le code source "SFML-Master" sur le site, je change le path, le path est bien modifié et le chemin ( C:\Qt\Qt5.0.2\Tools\MinGW\bin ) est ajouté. cmake-gui dans la console. Je fais tout ce qui est dit et ça fonctionne "Configuring done" et "Generating done". Mais voilà, j'ai CMAKE_INSTALL_PREFIX >> C:/Program Files (x86)/SFML et pourtant aucun fichier n'est crée après avoir généré. Vous savez pourquoi  il ne construit rien?

Et il y a une chose que je ne comprend pas, c'est le fait de juste ajouter au path le chemin du compilateur de Qt. Parce que en faisant "set path " dans la console, il y a aussi le chemin vers le compilateur MinGW de code blocks et il peut il y en avoir aussi d'autres. CMake a aucun moyen de savoir qu'il faut compiler SFML avec la version MinGW de Qt et non celle de codeblocks. Ou alors il s'adapte aux deux ? Je comprend pas bien cette histoire.

Merci de votre aide.


Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Compilation SFML via CMake
« Réponse #1 le: Mai 22, 2013, 08:39:39 pm »
Citer
J’essaie de compiler SFML pour Qt Creator
Pourquoi ne pas utiliser une version précompilée ? Qt livre une version de MinGW différente de celles qui sont proposées sur le site de SFML ?

Citer
pourtant aucun fichier n'est crée après avoir généré
Tu as compilé (make) et installé (make install) après avoir créé les makefiles avec CMake ?

Citer
Et il y a une chose que je ne comprend pas, c'est le fait de juste ajouter au path le chemin du compilateur de Qt. Parce que en faisant "set path " dans la console, il y a aussi le chemin vers le compilateur MinGW de code blocks et il peut il y en avoir aussi d'autres. CMake a aucun moyen de savoir qu'il faut compiler SFML avec la version MinGW de Qt et non celle de codeblocks. Ou alors il s'adapte aux deux ? Je comprend pas bien cette histoire.
S'il y a plusieurs MinGW dans le PATH il va prendre le premier qu'il trouve, tout simplement. Note que ce n'est pas spécifique à CMake : lorsque tu cherches un exécutable ou une DLL, Windows va te donner le premier qu'il trouve en inspectant les chemins du PATH dans l'ordre.
Laurent Gomila - SFML developer

MadMaXx

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Re : Compilation SFML via CMake
« Réponse #2 le: Mai 22, 2013, 09:09:41 pm »
Pour la version précompilée j'ai essayé mais sans succès. Je vais peut-être aborder cette étape en premier.

J'ai pris Qt ici http://qt-project.org/downloads , la version avec  MinGW 4.7 32bit qui doit tourner avec sjlj puisque c'est mis "The MinGW binary package includes a 32 bit MinGW-builds (gcc 4.7.2, sjlj exception handing, posix threading) toolchain" en bas de la page. Je suis pas très bon en anglais mais je ne crois pas me tromper. Je prend la version adéquate de sfml "SFML-2.0-windows-gcc-4.7-tdm-32bits".

J'ouvre un nouveau projet non Qt, je met ce code:

main.cpp:

Citer
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.draw(shape);
        window.display();
    }

    return 0;
}

le .pro :

TEMPLATE
=app CONFIG+=console CONFIG-=app_bundle CONFIG-=qt
 SOURCES+=main.cpp
 INCLUDEPATH+=C:\SFML-2.0\include LIBS+=C:\SFML-2.0\lib\libsfml-system.a\ C:\SFML-2.0\lib\libsfml-window.a\ C:\SFML-2.0\lib\libsfml-graphics.a\ C:\SFML-2.0\lib\libsfml-audio.a\ C:\SFML-2.0\lib\libsfml-network.a
Ca compile mais il y a juste le terminal "Appuyer sur ENTREE pour fermer cette fenetre"...

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Compilation SFML via CMake
« Réponse #3 le: Mai 22, 2013, 09:52:55 pm »
Y a vraiment rien d'autre ? Même pas un crash ?
Laurent Gomila - SFML developer

MadMaXx

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Re : Compilation SFML via CMake
« Réponse #4 le: Mai 22, 2013, 09:59:27 pm »
A part un "Impossible de récupérer la sortie de débogage" non.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Compilation SFML via CMake
« Réponse #5 le: Mai 22, 2013, 10:01:50 pm »
Et un truc sans SFML (avec un vieux std::cout), ça marche ? Et ce code SFML avec un std::cout au tout début, ça marche ?
Laurent Gomila - SFML developer

MadMaXx

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Re : Compilation SFML via CMake
« Réponse #6 le: Mai 22, 2013, 10:13:43 pm »
Le Hello world s'affiche sans SFML, mais avec non :o

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Compilation SFML via CMake
« Réponse #7 le: Mai 22, 2013, 11:26:20 pm »
Bizarre... mais comme on n'en sait pas plus, on va repartir sur la compilation de SFML. On verra bien si ça change quelque chose.
Laurent Gomila - SFML developer

MadMaXx

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Re : Compilation SFML via CMake
« Réponse #8 le: Mai 23, 2013, 12:15:20 pm »
J'ai finalement réussi avec la bibli SFML pré compilée, en ajoutant les dll à côté du .exe dans les dossier projets. Mais c'est quand même bizarre que QtCreator ne me dise rien car Code::Blocks lui me disait que les dll n'étaient pas présentes ...

Ça marche donc en dynamique c'est déjà ça :)

Mais je croyais que les .dll étaient juste la version "portable" des libs. Pourquoi dois-je avoir besoin des .dll pour faire tourner le programme sachant que je lui ai demandé d'inclure les libs dans le .pro ? Les lignes dans le .pro sont mal faites ?

Merci de votre aide.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Compilation SFML via CMake
« Réponse #9 le: Mai 23, 2013, 01:13:28 pm »
Les DLLs contiennent le code de SFML. Les bibliothèques (.a) que tu as liées à ton application sont juste des bibliothèques d'importation : elles ne contiennent aucun code, elles disent juste à ton appli "telle fonction se trouve dans telle DLL (qui devra donc être présente lors de l'exécution)".

Pour inclure SFML à ton exécutable directement, il faut lier la version statique de SFML (ce sont les fichiers libsfml-xxx-s.a).
Laurent Gomila - SFML developer

oros

  • Newbie
  • *
  • Messages: 1
    • Voir le profil
    • E-mail
Re : Re : Compilation SFML via CMake
« Réponse #10 le: Mai 23, 2013, 02:34:34 pm »
Le Hello world s'affiche sans SFML, mais avec non :o

J'ai eu exactement le même problème, linker la SFML à mon programme faisait qu'il se quittait directement sans rien afficher.
Le problème était du à une incompatibilité de versions, il me semble que j'avais un GCC 4.5.3 alors que SFML avait été compilée en 4.7.X, ce qui faisait qu'à l'exécution du programme, il crashait directement, sans afficher d'erreurs (ce qui est bizarre en soi, mais étant en console cygwin, je suppose que certaines erreurs d'exécution window ne sont pas gérées)

MadMaXx

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Re : Compilation SFML via CMake
« Réponse #11 le: Mai 23, 2013, 04:50:57 pm »
Oui le fait que ça ne soit pas la même version cause problème. Mais dans mon cas elles étaient bien compatibles, c'est juste que je liais des bibliothèques dynamiques au projet sans avoir mis de DLL...

En fait je n'avais pas bien compris le concept lib dynamique/statique ... Mais c'est très simple:
 xxx.a >> dynamique xxx-s.a >> statique.

J'ai essayé en statique et ça marche mais attention n'oubliez pas cette ligne dans votre .pro pour les utilisateurs de QtCreator : DEFINES += SFML_STATIC . Et n'hésitez pas à faire clic droit sur le nom de votre projet dans l'arborescence puis "Nettoyer".

Merci beaucoup pour votre aide :)