Archive

Archive for the ‘Programmation’ Category

SFML avec cmake

November 30th, 2009

L’objectif de ce billet est de montrer comment compiler une application C++ utilisant la bibliothèque SFML avec cmake.

Il faut bien entendu que cmake soit intallé, ainsi que la lib sfml.

Il n’y a malheureusement pas de module FindSFML livré avec cmake. J’en ai trouvé un il y a quelques temps sur le forum de la SFML qui semble ne plus être présent (régulièrement je reçois un mail me le demandant). J’ai testé ce module avec succès sous plusieurs distributions GNU/Linux, il ne fonctionne pas sous les non unix-like (merci de me faire part du module permettant d’utiliser la SFML de manière portable si vous en connaissez un).

Je créé un dossier pour contenir les modules supplémentaires :

  1. mkdir cmake_modules
  2. cd cmake_modules

Créez ensuite un fichier nommé FindSFML.cmake contenant

# Locate SFML library
# This module defines
# SFML_LIBRARY, the name of the library to link against
# SFML_FOUND, if false, do not try to link to SFML
# SFML_INCLUDE_DIR, where to find SFML headers
#
# Created by Nils Hasenbanck. Based on the FindSDL_*.cmake modules,
# created by Eric Wing, which were influenced by the FindSDL.cmake
# module, but with modifications to recognize OS X frameworks and
# additional Unix paths (FreeBSD, etc).

SET(SFML_COMPONENTS
System
Audio
Graphics
Network
Window
)

SET(SFML_INCLUDE_SEARCH_DIR
~/Library/Frameworks
/Library/Frameworks
/usr/local/include/SFML
/usr/include/SFML
/usr/local/include
/usr/include
/sw/include/SFML # Fink
/sw/include
/opt/local/include/SFML # DarwinPorts
/opt/local/include
/opt/csw/include/SFML # Blastwave
/opt/csw/include
/opt/include/SFML
/opt/include
)

SET(SFML_LIBRARY_SEARCH_DIR
~/Library/Frameworks
/Library/Frameworks
/usr/local
/usr
/sw
/opt/local
/opt/csw
/opt
)

FOREACH(COMPONENT ${SFML_COMPONENTS})
STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
STRING(TOLOWER ${COMPONENT} LOWERCOMPONENT)
FIND_LIBRARY(SFML_${UPPERCOMPONENT}_LIBRARY
NAMES sfml-${LOWERCOMPONENT}
HINTS
$ENV{SFMLDIR}
PATH_SUFFIXES lib64 lib
PATHS ${SFML_LIBRARY_SEARCH_DIR}
)
FIND_PATH(SFML_${UPPERCOMPONENT}_INCLUDE_DIR ${COMPONENT}.hpp
HINTS
$ENV{SFMLDIR}
PATH_SUFFIXES include
PATHS ${SFML_INCLUDE_SEARCH_DIR}
)
IF(SFML_${UPPERCOMPONENT}_INCLUDE_DIR AND SFML_${UPPERCOMPONENT}_LIBRARY)
LIST(APPEND SFML_LIBRARY ${SFML_${UPPERCOMPONENT}_LIBRARY})
LIST(APPEND SFML_INCLUDE_DIR ${SFML_${UPPERCOMPONENT}_INCLUDE_DIR})
LIST(REMOVE_DUPLICATES SFML_LIBRARY)
LIST(REMOVE_DUPLICATES SFML_INCLUDE_DIR)
ENDIF(SFML_${UPPERCOMPONENT}_INCLUDE_DIR AND SFML_${UPPERCOMPONENT}_LIBRARY)
ENDFOREACH(COMPONENT)

SET(SFML_FOUND "NO")
IF(SFML_SYSTEM_LIBRARY AND SFML_INCLUDE_DIR)
SET(SFML_FOUND "YES")
ENDIF(SFML_SYSTEM_LIBRARY AND SFML_INCLUDE_DIR)

INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SFML DEFAULT_MSG SFML_LIBRARY SFML_INCLUDE_DIR)

Ensuite, pour compiler un projet avec la SFML, il faut utiliser un CMakeList du genre

project(test)
cmake_minimum_required(VERSION 2.6)
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules")
set(CMAKE_CXX_FLAGS "-Wall -W -Werror -ansi -pedantic -g")
find_package(SFML REQUIRED)
SET(SOURCES
test.cpp
)

SET(EXECUTABLE_NAME
test
)

add_executable (
${EXECUTABLE_NAME} ${SOURCES}
)
target_link_libraries(${EXECUTABLE_NAME} ${SFML_LIBRARY})

Et ensuite, la compilation habituelle avec cmake (je conseille de compiler dans un dossier séparé), personnellement je fais
mkdir build && cd build
cmake ..
make

Site officiel de Boost
Cmake

Programmation ,

Boost avec CMake

November 29th, 2009

L’objectif de ce billet est de montrer comment compiler une application C++ utilisant boost avec cmake.

Tout d’abord, il faut avoir boost installé. Sous Ubuntu, il suffit de faire
sudo aptitude install libboost1.40-all-dev
Il faut bien entendu que cmake soit intallé
sudo aptitude install cmake

Ensuite, pour compiler un fichier avec boost, il faut utiliser un CMakeList du genre

cmake_minimum_required( VERSION 2.6 FATAL_ERROR )

SET(Boost_ADDITIONAL_VERSIONS "1.40.0" "1.41.0" )

# search for Boost version 1.40
# Components :
#filesystem, iostreams, programoptions, python, regex, serialization, signals
#system, thread, wave
find_package( Boost 1.40.0 COMPONENTS regex signals FATAL_ERROR)

link_directories ( ${Boost_LIBRARY_DIRS} )
include_directories ( ${Boost_INCLUDE_DIRS} )

SET (SOURCES
main.cpp
)

SET (EXECUTABLE_NAME
executable
)

add_executable (
${EXECUTABLE_NAME}
${SOURCES}
)

target_link_libraries (
${EXECUTABLE_NAME}
${Boost_LIBRARIES}
)

Et ensuite, la compilation habituelle avec cmake (je conseille de compiler dans un dossier séparé), personnellement je fais
mkdir build && cd build
cmake ..
make

Site officiel de Boost
Cmake

Programmation ,

Compiler Qt 4.6 (en développement)

August 7th, 2009

Si comme moi, vous êtes curieux de voire ce que Qt 4.6 va donner, et adapter votre programme au fur et à mesure à cette nouvelle version, il est bien sur possible de l’installer, en même temps que qt 4.5.

Voici une méthode pour compiler.

Prérequis

Vous devez avoir git d’installé. Pour ce faire, installez le paquet git-core (sous Ubuntu). Vous devez bien sur avoir l’essentiel de compilation habituel (g++, make…), qui sont contenus dans le paquet build-essential

Compilation

Tout d’abord, récupérons la dernière version des sources :

git clone git://gitorious.org/qt/qt.git qt-master

Une fois les sources récupérées, rendons nous dans le répertoire les contenant :

cd qt-master

Puis compilons les sources :
git checkout --track -b master-stable origin/master-stable
./configure -prefix /opt/master-stable -developer-build -opensource -fast -no-accessibility -no-nis -no-separate-debug-info -nomake examples -nomake demos
make -j2
sudo make install

Désormais, Qt 4.6 est installé dans /opt/master-stable

Pour pouvoir l’utiliser, il faut utiliser le qmake de ce répertoire, ce qui n’est pas très pratique. Je vous propose donc de réaliser un alias dans votre ~/.bashrc

vim ~/.bashrc

Et ajoutez-y la ligne

alias qmake6='/opt/master-stable/bin/qmake'

Récupitulatif

git clone git://gitorious.org/qt/qt.git qt-master
cd qt-master
git checkout --track -b master-stable origin/master-stable 
./configure -prefix /opt/master-stable -developer-build -opensource -fast -no-accessibility -no-nis -no-separate-debug-info -nomake examples -nomake demos -no-phonon
make -j3
make install

Programmation

Ubuntu Url : fini les problèmes avec les domaines kubuntu-fr, ubuntu-fr, xubuntu…

July 28th, 2009

Bonjour à tous,

Qui, parmis les utilisateurs du forum ubuntu-fr n’as pas déjà eu le problème suivant : quand on utilise ubuntu-fr, et qu’un utilisateur nous envoie un lien vers kubuntu-fr, on se retrouve sur la page de kubuntu-fr.

Ça pose 2 problèmes non négligeables :

  1. Changement de thème
  2. On est déconnecté !

J’ai donc décidé de résoudre ce problème. Depuis un certain temps, j’avais envie de voire comment fonctionnaient les extensions de Firefox, c’était donc l’occasion rêvée.

Après quelques galères, due à mon manque de connaissances en xul/javascript/extensions, je suis enfin arrivé à un résultat convenable.

L’extension Ubuntu Url, permet de rediriger n’importe quel domaine de forum d’Ubuntu-fr vers votre forum préféré :)

Le seul problème qu’il reste, c’est qu’on est obligé de se connecter à partir du site qu’on a défini comme préféré dans l’extension, mais c’est dans la logique des choses, donc ça n’est pas génant.

[edit] Il y a aussi un problème lors d’ouverture d’un lien modifié dans un nouvel onglet.

Pour installer l’extension, allez sur cliquez ici.

Pour définir votre forum préféré (celui vers lequel vous serez redirigé), utilisez “Outils”->”Url Ubuntu” et cliquez sur votre forum préféré. Par défaut, il s’agit de forum.ubutnu-fr.org.

Programmation ,