Permettre l’utilisation de la SFML sous Visual C++ 2010

Eh oui, car la SFML n'est (au jour où j'écris) disponible "que" pour les versions 2005 et 2008, en plus de MinGW. Vous me direz "y'a qu'à utiliser des logiciels libres !". Vu que mon but à court / moyen terme est de me familiariser avec Visual Studio, ce serait un brin dommage. Donc, SFML sous Visual.

Tout d'abord, pour éviter le moindre souci d'incompatibilité, il faut recompiler la SFML. Pour cela :

  • Télécharger le SDK complet à cette adresse : http://www.sfml-dev.org/download.php.
  • Extraire dans un répertoire qui sera celui de référence pour cette librairie.
  • Ouvrir SFML.sln, qui se trouve dans build/vc2008.
  • Visual Studio propose de convertir le projet, cliquer sur suivant jusqu'à ce que ça soit fait. S'il y a quelques erreurs, c'est normal : il s'agit des projets d'exemple, qui ne nous intéressent pas ici.
  • Supprimer de la solution tous les projets autres que les 6 en "sfml-" quelque chose.
  • Ensuite, recompiler les quatre cibles : Debug DLL, Debug static, Release DLL, Release static (choix dans le menu déroulant en haut à gauche).
  • Normalement tout devrait bien se passer : fermer la solution.
  • La compilation a créé des fichiers .lib dans lib/vc2008 : personnellement j'ai remplacé ceux présent dans lib avec ceux-là.

Pour lier la SFML à un projet, il faudra réaliser deux actions. La première consiste à indiquer l'emplacement de la librairie à Visual. Pour cela, aller dans les propriétés du projet, Configuration Properties, VC++ Directories. En haut à gauche, dans le menu déroulant, choisir All targets. Puis :

  • Dans Include Directories, ajouter le répertoire include du dossier où se trouve la SFML.
  • Dans Library Directories, ajouter le répertoire lib du dossier où se trouve la SFML.

La seconde action indique à l'éditeur de liens les librairies à utiliser. Pour cela, aller dans Configuration Properties, Linker, Input. Puis :

  • En configuration Debug : indiquer les librairies utilisées, de la forme sfml-...-d.lib
  • En configuration Release : indiquer les librairies utilisées, de la forme sfml-....lib
  • Si vous souhaitez effectuer une liaison statique (inclusion dans l'exécutable) plutôt que dynamique (par une DLL), il faut alors utiliser les formes sfml-...-s-d.lib et sfml-...-s.lib

En cas de liaison dynamique, il faut bien évidemment placer les DLL nécessaires dans le dossier du projet (pas de la solution), en version debug et release.

Et si je n'ai rien oublié, le projet devrait compiler et s'exécuter tranquillement... Visual râlera contre des fichiers PDB manquants en mode debug, mais ce n'est rien de dramatique. Au départ j'avais oublié de remplacer les fichiers de lib par leurs nouvelles versions de lib/vc2008, et le programme fonctionnait en Release mais pas en Debug ("Application failed to start correctly, error 0xc0150002" ou quelque chose du genre).

Avec tout ça en place, et en utilisant les tutoriels situés ici (section "Window package"), j'ai rapidement obtenu une fenêtre avec un cube qui tourne et enchaîné sur un générateur de terrain. Mais les détails seront pour plus tard ;)