SlideShare una empresa de Scribd logo
1 de 122
Descargar para leer sin conexión
ENVOL - Outils de construction 
formation pour le dEveloppemeNt et la ValOrisation des Logiciels en 
environnement de recherche 
Organisation par le projet PLUME et les reseaux Calcul et DevLog 
Johan Moreau 
IRCAD 
27 septembre 2010 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 1 / 98
Le document : 
Cette presentation a ete faite avec des outils opensource et libre dans 
le but de presenter des outils de construction d'applications eux-aussi 
opensource. 
N'hesitez pas a m'envoyer vos remarques ou corrections sur 
johan.moreau sur gmail.com 
Ce document est distribue sous licence Creative Commons 
Attribution-ShareAlike 2.0 
La session : 
Des sequences de slides emmelees avec des exemples de codes 
Des questions (et je l'espere des reponses) a tout moment 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 2 / 98
Sommaire 
Sommaire 
Le but de cette presentation est de decouvrir les outils de construction 
d'applications dans le contexte d'un laboratoire de recherche. 
1. La construction d'application 
2. Les GNU Autotools 
3. CMake 
4. SCons 
5. QMake, MSBuild, Ant, Maven, ... 
Conclusion 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 3 / 98
La construction d'application 
1. La construction d'application 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 4 / 98
La construction d'application 
Sommaire 
La construction d'application 
Quelques rappels et remarques 
Les Make
le 
Les limitations et les solutions 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 5 / 98
La construction d'application Quelques rappels ... 
Les processus de construction simple 
On parle ici des logiciels permettant d'automatiser (ordonnancer et piloter) 
l'ensemble des actions (preprocesseur, compilation, editions des liens, etc.) 
contribuant, a partir de donnees sources, a la production d'un (ensemble) 
logiciel. 
Les termes anglais sont Software Build1 ou Build automation2. 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 6 / 98
La construction d'application Quelques rappels ... 
Preprocesseur 3 
Il s'agit d'une etape permettant des transformations sur un code 
source. 
Dans le monde C/C++, la commande du preprocesseur la plus 
repandue est include qui a pour but de recopier le contenu du
chier 
indique en param^etre. (A noter la dierence avec les package en 
java, import en Python et co) 
On peut aussi utiliser le preprocesseur pour faire des macros via 
de
ne en C/C++ par exemple, de compilation conditionnelle, de la 
meta-programmation, etc ... 
A noter que les conventions de codage demande souvent de limiter 
l'usage du preprocesseur (retours d'erreurs du compilateur) 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 7 / 98
La construction d'application Quelques rappels ... 
Compilation 5 
Il s'agit d'une etape traduisant un code d'un langage vers du code en 
langage machine (reel ou virtuel) 
Le langage machine est soit directement interprete par la machine soit 
interprete par une machine virtuelle4. Dans ce dernier cas on peut 
citer Java ou DotNet. 
Les phases (traditionelles) : 
analyses lexicale, syntaxique puis semantique, 
generation du code intermediaire puis optimisation, 
generation du code objet 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 8 / 98
La construction d'application Quelques rappels ... 
Edition des liens 6 
L'edition des liens est un processus qui permet de creer des
chiers 
executables ou des bibliotheques dynamiques ou statiques, a partir de
chiers objets. 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 9 / 98
La construction d'application Quelques rappels ... 
Un peu de compilation donc ... Exemple en C sous UNIX 
Il faut deja organiser un peu ses
chiers, par exemple 
Pour C/C++, speration des declarations et implementations 
Pour Java, regroupement par package 
... 
Ensuite organiser son code : 
#ifdef DEBUG pour C par exemple (a activer sur la ligne de 
commande : gcc -DDEBUG=1
chier.c) 
Pour Java, regroupement par package 
... 
cc : Supprime les commentaires, eectue les inclusions et les 
macros,... 
cc1 : Converti le code C en assembleur 
as : Assemblage des
chiers assembleurs, genere les
chiers objets 
ld : Determine les adresses memoires des symboles et lie les
chiers 
objets entre eux 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 10 / 98
La construction d'application Quelques rappels ... 
La construction dans le monde reel 
Cette suite semble
xe et standard et donc totalement automatisable ! 
Mais en realite : 
Plusieurs langages avec chacun ses speci
cites 
Des variantes dans les langages (gtk vs Qt par exemple) 
Problemes du multiplateforme/architecture/distribution 
Grand nombre de
chiers et de cibles 
Il faut des outils pour assister le developpeur dans cette phase. 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 11 / 98
La construction d'application Quelques rappels ... 
La construction d'applications C/C++ 
Cette presentation n'illustrera que les principes les plus courants de la 
construction d'applications C/C++ 
On ne parlera que tres peu des systemes embarques dans les IDE 
On laissera les problemes lies aux compilateurs de c^otes 
On ne parlera que tres peu des outils/besoins post-compilation (test 
unitaires, packaging, etc ...) 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 12 / 98
La construction d'application Quelques rappels ... 
A long time ago, in a galaxy far far away... 9 
Jusqu'a la
n des annees 70, les programmes etaient petits. 
En 1977, le Dr Stuart I Feldman (Bell Labs) invente l'outil Make 
L'outil rencontre un succes immediat. 
En 1997, Peter Miller ecrit l'article : Recursive Make Considered 
Harmful7. 
Depuis de nombreux outils essayent d'ameliorer de processus 8. 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 13 / 98
La construction d'application Les Make
le 
La syntaxe du Make
le 
Le
chier Make
le est compose de plusieurs regles de la forme : 
cible : dependances 
TAB commandes 
cible : dependances 
TAB commandes 
Chaque commande est precedee d'une tabulation : 
Make
le 
prog : main.o functions .o 
gcc o prog main.o functions .o 
main.o : main.c functions .h 
gcc c main.c 
functions .o : functions .c functions .h 
gcc c functions .c 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 14 / 98
La construction d'application Les Make
le 
Les evaluations de regles 
Lors de l'utilisation de la commande make cible 
Evaluation de la regle dont la cible est passee en argument a make 
Evaluation de la premiere regle rencontree (s'il n'y a pas d'argument) 
Les dependances sont analysees 
Si une dependance n'est pas a jour on tente de la resoudre 
Si cette dependance est cible d'une autre regle du Make
le alors cette 
regle est a son tour evaluee 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 15 / 98
La construction d'application Les Make
le 
Les cibles classiques 
all 
Generation de toutes les cibles 
.PHONY 
Les dependances de cette cible sont toujours regenerees 
clean 
Suppression des
chiers intermediaires 
Mproper / distclean 
clean+ suppression des
chiers cibles 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 16 / 98
La construction d'application Les Make
le 
Les variables 
Declaration de variables via NOM=VALEUR. Les variables traditionnelles : 
CFLAGS : options du compilatuer C (CXXFLAGS pour C++) 
LDFLAGS : options de l'editeur de liens 
... 
Les variables internes : 
$@ : la cible 
$ : la 1ere dependance 
$^ : la liste des dependances 
$* : le nom de la cible sans suxe 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 17 / 98
La construction d'application Les Make
le 
Et plus encore ... 
Les conditionnelles : 
ifeq .... else .... endif 
La recherche de dependances : 
Utilisation de la variable VPATH/vpath (VPATH = src :../headers) 
Les appels imbriques : 
cd $(SRC DIR)  $(MAKE) $@ 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 18 / 98
La construction d'application Les limitations et les solutions 
Quels reproches au Make ancestral ? 
Pas vraiment portable/multiplateforme : base sur des scripts shell et 
des proprietes du systeme de
chiers. De plus les evolutions des 
descandants (GNU Make, ...) ont des implementations particulieres 
pour les fonctions manquantes (if-then-else par exemple). 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 19 / 98
La construction d'application Les limitations et les solutions 
Quels reproches au Make ancestral ? 
Pas vraiment portable/multiplateforme : base sur des scripts shell et 
des proprietes du systeme de
chiers. De plus les evolutions des 
descandants (GNU Make, ...) ont des implementations particulieres 
pour les fonctions manquantes (if-then-else par exemple). 
Diculte a monter en charge : L'evolution du code qui est necessaire 
dans les gros projets s'articule souvent autour de changement 
d'arborescence ou de renommage de partie de code. Ceci entraine de 
nombreux changements manuels dans les Make
le. 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 19 / 98
La construction d'application Les limitations et les solutions 
Quels reproches au Make ancestral ? 
Pas vraiment portable/multiplateforme : base sur des scripts shell et 
des proprietes du systeme de
chiers. De plus les evolutions des 
descandants (GNU Make, ...) ont des implementations particulieres 
pour les fonctions manquantes (if-then-else par exemple). 
Diculte a monter en charge : L'evolution du code qui est necessaire 
dans les gros projets s'articule souvent autour de changement 
d'arborescence ou de renommage de partie de code. Ceci entraine de 
nombreux changements manuels dans les Make
le. 
Le langage du Make
le ajoute une complexite qui n'a pas de raison 
d'^etre. De plus il est relativement limite. 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 19 / 98
La construction d'application Les limitations et les solutions 
Quels reproches au Make ancestral ? 
Pas vraiment portable/multiplateforme : base sur des scripts shell et 
des proprietes du systeme de
chiers. De plus les evolutions des 
descandants (GNU Make, ...) ont des implementations particulieres 
pour les fonctions manquantes (if-then-else par exemple). 
Diculte a monter en charge : L'evolution du code qui est necessaire 
dans les gros projets s'articule souvent autour de changement 
d'arborescence ou de renommage de partie de code. Ceci entraine de 
nombreux changements manuels dans les Make
le. 
Le langage du Make
le ajoute une complexite qui n'a pas de raison 
d'^etre. De plus il est relativement limite. 
Les veri
cations d'evolutions de code sont super
cielles. 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 19 / 98
La construction d'application Les limitations et les solutions 
Quels reproches au Make ancestral ? 
Pas vraiment portable/multiplateforme : base sur des scripts shell et 
des proprietes du systeme de
chiers. De plus les evolutions des 
descandants (GNU Make, ...) ont des implementations particulieres 
pour les fonctions manquantes (if-then-else par exemple). 
Diculte a monter en charge : L'evolution du code qui est necessaire 
dans les gros projets s'articule souvent autour de changement 
d'arborescence ou de renommage de partie de code. Ceci entraine de 
nombreux changements manuels dans les Make
le. 
Le langage du Make
le ajoute une complexite qui n'a pas de raison 
d'^etre. De plus il est relativement limite. 
Les veri
cations d'evolutions de code sont super
cielles. 
Il n'y pas de systeme de detection implicite de dependances 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 19 / 98
La construction d'application Les limitations et les solutions 
Ce qui a change aussi ... 
Precedement : 
Compiler votre code 
Faire la liaison avec les librairies (statiques/dynamiques) 
Distribuer sous forme de sources ou de binaires 
Maintenant, en plus : 
Executer les tests unitaires (voir fonctionnels) 
Faire un Installeur (msi, deb, rpm, installshield, ...) 
Gerer les problematiques d'internationalisation 
Generer la documentation developpeur et utilisateur, les metriques, ... 
A ceci s'ajoute une tendance depuis 2000 : l'integration continue 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 20 / 98
La construction d'application Les limitations et les solutions 
La notion d'integration continue 10 
L'idee : veri
er a chaque modi
cation de code source que le resultat des 
modi
cations ne produit pas de regression du logiciel (donc l'executable, 
mais aussi la documentation, les metriques, ...) 
Ceci implique donc une construction 
rapide 

exible 
standardisee (un minimum d'outils) 
identique pour toutes les cibles (OS, architecture, ...) 
A partir de la, nous pouvons imaginer la production de livrables, de 
versions journalieres(nightly build), des deploiements automatiques, la 
generation automatique de l'historique (release notes), etc ... 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 21 / 98
La construction d'application Les limitations et les solutions 
Evolution forte au milieu des annees 90 
Apparition des methodes agiles 
Developpement du marche Web 
Augmentation des langages et plateformes 
Croissance de l'opensource 
L'ensemble de ces facteurs pousse a avoir un systeme optimum pour la 
construction d'application. 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 22 / 98
La construction d'application Les limitations et les solutions 
Vraiment un probleme nouveau ? 
Debut des annees 90 : 
imake pour XFree86 
Cygnus et les gcc con
gure script pour les outils GNU 
autoconf 
C'est cette derniere initiative qui f^ut la bonne. 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 23 / 98
La construction d'application Les limitations et les solutions 
La reponse du monde libre 
Creation d'autoconf en 1991 par David J. MacKenzie : apparition du 
script con
gure et des
chiers Make
le.in 
Utilisation de m4 et adoption des conventions issues de GNU 
Puis passage au con
gure.in 
En
n, 1994-09-19 First CVS commit11 
Le choix qui a ete fait ici a ete de s'appuyer sur les fonctionnalites 
presentes sur le systeme en les testant (la partie con
gure), d'utiliser des 
outils de construction traditionnels (make, ...) et d'installer le produit de la 
compilation suivant des standards. 
De plus, il n'y aucun lien avec les environnements de travail des 
developpeurs (IDE). 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 24 / 98
La construction d'application Les limitations et les solutions 
Les autres reponses qui ont suivies 
Ant, http://ant.apache.org 
CMake, http://www.cmake.org 
Jam/BJam, http://www.perforce.com/jam/jam.html 
Maven, http://maven.apache.org 
MSBuild, http://http://en.wikipedia.org/wiki/MSBuild 
Qmake, http://en.wikipedia.org/wiki/Qmake 
Scons, http://www.scons.org 
Sconspiracy, http://code.google.com/p/sconspiracy 
Waf, http://code.google.com/p/waf 
Attention au syndrome du NIH : Not Invented Here 12 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 25 / 98
La construction d'application Les limitations et les solutions 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 26 / 98
GNU Autotools 
2. GNU Autotools 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 27 / 98
GNU Autotools 
Sommaire 
GNU Autotools 
Les bases de GNU Autotools 
GNU Autotools dans le detail 
La gestion des bilbiotheques 
Conclusion 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 28 / 98
GNU Autotools Les bases de GNU Autotools 
Les references 
Les sources d'informations qui ont ete utilisees pour cette partie : 
http ://www.gnu.org/software/autoconf/ 
http ://en.wikipedia.org/ 
http ://sourceware.org/autobook/ 
http ://www.lrde.epita.fr/ adl/autotools.html 
http ://www.infres.enst.fr/ dax/polys/con
gure/ 
http ://fsmsh.com/2754 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 29 / 98
GNU Autotools Les bases de GNU Autotools 
GNU Autotools 
Licence GPL, cree en 1992 
Ecrit en shell + m4 
Combinaison d'outils 
Generation automatique de make
le 
Make
les generiques, parametrables 
Con
gures automatiquement selon la plateforme 
Bonne portabilite des developpements 
Construction simple et transparente pour l'utilisateur : 
./con
gure,make,make install 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 30 / 98
GNU Autotools Les bases de GNU Autotools 
GNU Autotools, un ensemble d'outils 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 31 / 98
GNU Autotools Les bases de GNU Autotools 
On peut simpli
er un peu... 
On peut simpli
er les 1eres etapes : autoreconf 
La sequence serait donc : 
Creation du con
gure.ac 
Creation des Make
le.am 
Lancement de autoreconf {install 
Lancement de con
gure 
Lancement de make 
Lnacement de make install 
Bon allez, on se lance... 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 32 / 98
GNU Autotools Les bases de GNU Autotools 
Notre petit Hello World 
src/main.c 
#include stdio.h 
int main(int argc, char* argv []) 
f 
printf (Hello Worldnn); 
return 0; 
g 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 33 / 98
GNU Autotools Les bases de GNU Autotools 
Les 3
chiers a editer 
con
gure.ac 
AC_INIT([amhello], [1.0], [bug-report@address]) 
AM_INIT_AUTOMAKE([foreign -Wall -Werror]) 
AC_PROG_CC 
AC_CONFIG_HEADERS([config.h]) 
AC_CONFIG_FILES([Makefile src/Makefile]) 
AC_OUTPUT 
Make
le.am 
SUBDIRS = src 
src/Make
le.am 
bin_PROGRAMS = hello 
hello_SOURCES = main.c 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 34 / 98
GNU Autotools GNU Autotools dans le detail 
Notre con
gure.ac 
con
gure.ac 
AC_INIT([amhello], [1.0], [bug-report@address]) 
AM_INIT_AUTOMAKE([foreign -Wall -Werror]) 
AC_PROG_CC 
AC_CONFIG_HEADERS([config.h]) 
AC_CONFIG_FILES([Makefile src/Makefile]) 
AC_OUTPUT 
Initialisation Autoconf (nom, version, @ de support, ...) 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 35 / 98
GNU Autotools GNU Autotools dans le detail 
Notre con
gure.ac 
con
gure.ac 
AC_INIT([amhello], [1.0], [bug-report@address]) 
AM_INIT_AUTOMAKE([foreign -Wall -Werror]) 
AC_PROG_CC 
AC_CONFIG_HEADERS([config.h]) 
AC_CONFIG_FILES([Makefile src/Makefile]) 
AC_OUTPUT 
Initialisation Autoconf (nom, version, @ de support, ...) 
Initialisation Automake (remonte les erreurs, ...) 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 35 / 98
GNU Autotools GNU Autotools dans le detail 
Notre con
gure.ac 
con
gure.ac 
AC_INIT([amhello], [1.0], [bug-report@address]) 
AM_INIT_AUTOMAKE([foreign -Wall -Werror]) 
AC_PROG_CC 
AC_CONFIG_HEADERS([config.h]) 
AC_CONFIG_FILES([Makefile src/Makefile]) 
AC_OUTPUT 
Initialisation Autoconf (nom, version, @ de support, ...) 
Initialisation Automake (remonte les erreurs, ...) 
Utilisation du compilateur C 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 35 / 98
GNU Autotools GNU Autotools dans le detail 
Notre con
gure.ac 
con
gure.ac 
AC_INIT([amhello], [1.0], [bug-report@address]) 
AM_INIT_AUTOMAKE([foreign -Wall -Werror]) 
AC_PROG_CC 
AC_CONFIG_HEADERS([config.h]) 
AC_CONFIG_FILES([Makefile src/Makefile]) 
AC_OUTPUT 
Initialisation Autoconf (nom, version, @ de support, ...) 
Initialisation Automake (remonte les erreurs, ...) 
Utilisation du compilateur C 
Declare con
g.h pour les ent^etes 
Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 35 / 98
GNU Autotools GNU Autotools dans le detail 
Notre con
gure.ac 
con
gure.ac 
AC_INIT([amhello], [1.0], [bug-report@address]) 
AM_INIT_AUTOMAKE([foreign -Wall -Werror]) 
AC_PROG_CC 
AC_CONFIG_HEADERS([config.h]) 
AC_CONFIG_FILES([Makefile src/Makefile]) 
AC_OUTPUT 
Initialisation Autoconf (nom, version, @ de support, ...) 
Initialisation Automake (remonte les erreurs, ...) 
Utilisation du compilateur C 
Declare con
g.h pour les ent^etes 
Declare Make
le et src/Make

Más contenido relacionado

La actualidad más candente

08 jus 20101123_cae_linux_presentation
08 jus 20101123_cae_linux_presentation08 jus 20101123_cae_linux_presentation
08 jus 20101123_cae_linux_presentationOpenCascade
 
Introdot Netc Sharp Fr
Introdot Netc Sharp FrIntrodot Netc Sharp Fr
Introdot Netc Sharp FrGregory Renard
 
Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)Farouk Mezghich
 
Initiation à Android
Initiation à AndroidInitiation à Android
Initiation à AndroidLilia Sfaxi
 
C# 5 versus Java 8... Quand C++ 11 s'invite à la fête
C# 5 versus Java 8... Quand C++ 11 s'invite à la fêteC# 5 versus Java 8... Quand C++ 11 s'invite à la fête
C# 5 versus Java 8... Quand C++ 11 s'invite à la fêteFabrice JEAN-FRANCOIS
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 OverviewGregory Renard
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07haythem_2015
 
L’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketL’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketStéphane Legrand
 
Java 110605092007-phpapp02
Java 110605092007-phpapp02Java 110605092007-phpapp02
Java 110605092007-phpapp02Eric Bourdet
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Parischristophep21
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Microsoft
 
Meetup Python Nantes - les tests en python
Meetup Python Nantes - les tests en pythonMeetup Python Nantes - les tests en python
Meetup Python Nantes - les tests en pythonArthur Lutz
 
Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2Laurent BUNIET
 
Techniques de programmation avancée LabVIEW : gestion des données de la local...
Techniques de programmation avancée LabVIEW : gestion des données de la local...Techniques de programmation avancée LabVIEW : gestion des données de la local...
Techniques de programmation avancée LabVIEW : gestion des données de la local...Luc Desruelle
 
12 03 19_n7_openfoam_presentation_generale
12 03 19_n7_openfoam_presentation_generale12 03 19_n7_openfoam_presentation_generale
12 03 19_n7_openfoam_presentation_generaleCyprien Soulaine
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistVincent Agnus
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfacesAziz Darouichi
 

La actualidad más candente (18)

08 jus 20101123_cae_linux_presentation
08 jus 20101123_cae_linux_presentation08 jus 20101123_cae_linux_presentation
08 jus 20101123_cae_linux_presentation
 
Introdot Netc Sharp Fr
Introdot Netc Sharp FrIntrodot Netc Sharp Fr
Introdot Netc Sharp Fr
 
Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)
 
Initiation à Android
Initiation à AndroidInitiation à Android
Initiation à Android
 
C# 5 versus Java 8... Quand C++ 11 s'invite à la fête
C# 5 versus Java 8... Quand C++ 11 s'invite à la fêteC# 5 versus Java 8... Quand C++ 11 s'invite à la fête
C# 5 versus Java 8... Quand C++ 11 s'invite à la fête
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
 
L’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketL’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacket
 
Cours spring
Cours springCours spring
Cours spring
 
Java 110605092007-phpapp02
Java 110605092007-phpapp02Java 110605092007-phpapp02
Java 110605092007-phpapp02
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Paris
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
 
Meetup Python Nantes - les tests en python
Meetup Python Nantes - les tests en pythonMeetup Python Nantes - les tests en python
Meetup Python Nantes - les tests en python
 
Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2
 
Techniques de programmation avancée LabVIEW : gestion des données de la local...
Techniques de programmation avancée LabVIEW : gestion des données de la local...Techniques de programmation avancée LabVIEW : gestion des données de la local...
Techniques de programmation avancée LabVIEW : gestion des données de la local...
 
12 03 19_n7_openfoam_presentation_generale
12 03 19_n7_openfoam_presentation_generale12 03 19_n7_openfoam_presentation_generale
12 03 19_n7_openfoam_presentation_generale
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelist
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfaces
 

Similar a Outils de construction pour la recherche

Programmation-en-C-ESIITECH-2023-2024-bis.pptx
Programmation-en-C-ESIITECH-2023-2024-bis.pptxProgrammation-en-C-ESIITECH-2023-2024-bis.pptx
Programmation-en-C-ESIITECH-2023-2024-bis.pptxOlyvierNzighou1
 
De la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsDe la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsJohan Moreau
 
Programmation-en-C-ESIITECH-2023-2024.pptx
Programmation-en-C-ESIITECH-2023-2024.pptxProgrammation-en-C-ESIITECH-2023-2024.pptx
Programmation-en-C-ESIITECH-2023-2024.pptxOlyvierNzighou1
 
Initiation à UML: Partie 1
Initiation à UML: Partie 1Initiation à UML: Partie 1
Initiation à UML: Partie 1DIALLO Boubacar
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicEmmanuel Hugonnet
 
Captronic grenoble 01102014 version presentee
Captronic grenoble 01102014 version presenteeCaptronic grenoble 01102014 version presentee
Captronic grenoble 01102014 version presenteePatrick MOREAU
 
Développer des codes de simulation numérique avec une équipe "non geek" à l'ULg
Développer des codes de simulation numérique avec une équipe "non geek" à l'ULgDévelopper des codes de simulation numérique avec une équipe "non geek" à l'ULg
Développer des codes de simulation numérique avec une équipe "non geek" à l'ULgRomain Boman
 
OCCIware presentation au groupe de travail Big Data du SCS
OCCIware presentation au groupe de travail Big Data du SCSOCCIware presentation au groupe de travail Big Data du SCS
OCCIware presentation au groupe de travail Big Data du SCSOCCIware
 
Delphi et les tests unitaires
Delphi et les tests unitairesDelphi et les tests unitaires
Delphi et les tests unitairespprem
 
Introduction aux logiciels libres et à Linux
Introduction aux logiciels libres et à LinuxIntroduction aux logiciels libres et à Linux
Introduction aux logiciels libres et à LinuxBruno Cornec
 
Cours SE linux
Cours SE linuxCours SE linux
Cours SE linuxIdriss22
 
Architecture logicielle #1 : introduction
Architecture logicielle #1 : introductionArchitecture logicielle #1 : introduction
Architecture logicielle #1 : introductionJean Michel
 
1er rapport d'étonnement veille expédition ReFaire
1er rapport d'étonnement veille expédition ReFaire1er rapport d'étonnement veille expédition ReFaire
1er rapport d'étonnement veille expédition ReFaireFing
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPjulien pauli
 
Concours Marocain de l\’Open Source CMOS édition 2008
Concours Marocain de l\’Open Source CMOS édition 2008Concours Marocain de l\’Open Source CMOS édition 2008
Concours Marocain de l\’Open Source CMOS édition 2008Nadir Haouari
 

Similar a Outils de construction pour la recherche (20)

Programmation-en-C-ESIITECH-2023-2024-bis.pptx
Programmation-en-C-ESIITECH-2023-2024-bis.pptxProgrammation-en-C-ESIITECH-2023-2024-bis.pptx
Programmation-en-C-ESIITECH-2023-2024-bis.pptx
 
De la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsDe la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logiciels
 
Programmation-en-C-ESIITECH-2023-2024.pptx
Programmation-en-C-ESIITECH-2023-2024.pptxProgrammation-en-C-ESIITECH-2023-2024.pptx
Programmation-en-C-ESIITECH-2023-2024.pptx
 
Initiation à UML: Partie 1
Initiation à UML: Partie 1Initiation à UML: Partie 1
Initiation à UML: Partie 1
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
 
SystemC
SystemCSystemC
SystemC
 
Captronic grenoble 01102014 version presentee
Captronic grenoble 01102014 version presenteeCaptronic grenoble 01102014 version presentee
Captronic grenoble 01102014 version presentee
 
Développer des codes de simulation numérique avec une équipe "non geek" à l'ULg
Développer des codes de simulation numérique avec une équipe "non geek" à l'ULgDévelopper des codes de simulation numérique avec une équipe "non geek" à l'ULg
Développer des codes de simulation numérique avec une équipe "non geek" à l'ULg
 
OCCIware presentation au groupe de travail Big Data du SCS
OCCIware presentation au groupe de travail Big Data du SCSOCCIware presentation au groupe de travail Big Data du SCS
OCCIware presentation au groupe de travail Big Data du SCS
 
Delphi et les tests unitaires
Delphi et les tests unitairesDelphi et les tests unitaires
Delphi et les tests unitaires
 
Introduction aux logiciels libres et à Linux
Introduction aux logiciels libres et à LinuxIntroduction aux logiciels libres et à Linux
Introduction aux logiciels libres et à Linux
 
Cours SE linux
Cours SE linuxCours SE linux
Cours SE linux
 
Eclipse Impress
Eclipse ImpressEclipse Impress
Eclipse Impress
 
Chapitre 1
Chapitre 1Chapitre 1
Chapitre 1
 
openFrameworks
openFrameworksopenFrameworks
openFrameworks
 
Architecture logicielle #1 : introduction
Architecture logicielle #1 : introductionArchitecture logicielle #1 : introduction
Architecture logicielle #1 : introduction
 
1er rapport d'étonnement veille expédition ReFaire
1er rapport d'étonnement veille expédition ReFaire1er rapport d'étonnement veille expédition ReFaire
1er rapport d'étonnement veille expédition ReFaire
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHP
 
Concours Marocain de l\’Open Source CMOS édition 2008
Concours Marocain de l\’Open Source CMOS édition 2008Concours Marocain de l\’Open Source CMOS édition 2008
Concours Marocain de l\’Open Source CMOS édition 2008
 
Agl2012
Agl2012Agl2012
Agl2012
 

Más de Johan Moreau

Les premières minutes d’une cyberattaque
Les premières minutes d’une cyberattaqueLes premières minutes d’une cyberattaque
Les premières minutes d’une cyberattaqueJohan Moreau
 
Actions prioritaires pour la SSI
Actions prioritaires pour la SSI Actions prioritaires pour la SSI
Actions prioritaires pour la SSI Johan Moreau
 
Implications des objets connectés sur la sécurité de l'entreprise
Implications des objets connectés sur la sécurité de l'entrepriseImplications des objets connectés sur la sécurité de l'entreprise
Implications des objets connectés sur la sécurité de l'entrepriseJohan Moreau
 
Gestion des vulnérabilités dans le cas de Shellshock
Gestion des vulnérabilités dans le cas de ShellshockGestion des vulnérabilités dans le cas de Shellshock
Gestion des vulnérabilités dans le cas de ShellshockJohan Moreau
 
Firewall opensource et gestion de configuration pour l'infrastructure
Firewall opensource et gestion de configuration pour l'infrastructureFirewall opensource et gestion de configuration pour l'infrastructure
Firewall opensource et gestion de configuration pour l'infrastructureJohan Moreau
 
BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?
BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?
BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?Johan Moreau
 
Processus de développement
Processus de développementProcessus de développement
Processus de développementJohan Moreau
 
IPv6 au Clusir-Est
IPv6 au Clusir-EstIPv6 au Clusir-Est
IPv6 au Clusir-EstJohan Moreau
 
2009 2010 Fip3 A Unix
2009 2010 Fip3 A Unix2009 2010 Fip3 A Unix
2009 2010 Fip3 A UnixJohan Moreau
 

Más de Johan Moreau (9)

Les premières minutes d’une cyberattaque
Les premières minutes d’une cyberattaqueLes premières minutes d’une cyberattaque
Les premières minutes d’une cyberattaque
 
Actions prioritaires pour la SSI
Actions prioritaires pour la SSI Actions prioritaires pour la SSI
Actions prioritaires pour la SSI
 
Implications des objets connectés sur la sécurité de l'entreprise
Implications des objets connectés sur la sécurité de l'entrepriseImplications des objets connectés sur la sécurité de l'entreprise
Implications des objets connectés sur la sécurité de l'entreprise
 
Gestion des vulnérabilités dans le cas de Shellshock
Gestion des vulnérabilités dans le cas de ShellshockGestion des vulnérabilités dans le cas de Shellshock
Gestion des vulnérabilités dans le cas de Shellshock
 
Firewall opensource et gestion de configuration pour l'infrastructure
Firewall opensource et gestion de configuration pour l'infrastructureFirewall opensource et gestion de configuration pour l'infrastructure
Firewall opensource et gestion de configuration pour l'infrastructure
 
BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?
BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?
BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?
 
Processus de développement
Processus de développementProcessus de développement
Processus de développement
 
IPv6 au Clusir-Est
IPv6 au Clusir-EstIPv6 au Clusir-Est
IPv6 au Clusir-Est
 
2009 2010 Fip3 A Unix
2009 2010 Fip3 A Unix2009 2010 Fip3 A Unix
2009 2010 Fip3 A Unix
 

Outils de construction pour la recherche

  • 1. ENVOL - Outils de construction formation pour le dEveloppemeNt et la ValOrisation des Logiciels en environnement de recherche Organisation par le projet PLUME et les reseaux Calcul et DevLog Johan Moreau IRCAD 27 septembre 2010 Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 1 / 98
  • 2. Le document : Cette presentation a ete faite avec des outils opensource et libre dans le but de presenter des outils de construction d'applications eux-aussi opensource. N'hesitez pas a m'envoyer vos remarques ou corrections sur johan.moreau sur gmail.com Ce document est distribue sous licence Creative Commons Attribution-ShareAlike 2.0 La session : Des sequences de slides emmelees avec des exemples de codes Des questions (et je l'espere des reponses) a tout moment Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 2 / 98
  • 3. Sommaire Sommaire Le but de cette presentation est de decouvrir les outils de construction d'applications dans le contexte d'un laboratoire de recherche. 1. La construction d'application 2. Les GNU Autotools 3. CMake 4. SCons 5. QMake, MSBuild, Ant, Maven, ... Conclusion Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 3 / 98
  • 4. La construction d'application 1. La construction d'application Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 4 / 98
  • 5. La construction d'application Sommaire La construction d'application Quelques rappels et remarques Les Make
  • 6. le Les limitations et les solutions Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 5 / 98
  • 7. La construction d'application Quelques rappels ... Les processus de construction simple On parle ici des logiciels permettant d'automatiser (ordonnancer et piloter) l'ensemble des actions (preprocesseur, compilation, editions des liens, etc.) contribuant, a partir de donnees sources, a la production d'un (ensemble) logiciel. Les termes anglais sont Software Build1 ou Build automation2. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 6 / 98
  • 8. La construction d'application Quelques rappels ... Preprocesseur 3 Il s'agit d'une etape permettant des transformations sur un code source. Dans le monde C/C++, la commande du preprocesseur la plus repandue est include qui a pour but de recopier le contenu du
  • 9. chier indique en param^etre. (A noter la dierence avec les package en java, import en Python et co) On peut aussi utiliser le preprocesseur pour faire des macros via de
  • 10. ne en C/C++ par exemple, de compilation conditionnelle, de la meta-programmation, etc ... A noter que les conventions de codage demande souvent de limiter l'usage du preprocesseur (retours d'erreurs du compilateur) Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 7 / 98
  • 11. La construction d'application Quelques rappels ... Compilation 5 Il s'agit d'une etape traduisant un code d'un langage vers du code en langage machine (reel ou virtuel) Le langage machine est soit directement interprete par la machine soit interprete par une machine virtuelle4. Dans ce dernier cas on peut citer Java ou DotNet. Les phases (traditionelles) : analyses lexicale, syntaxique puis semantique, generation du code intermediaire puis optimisation, generation du code objet Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 8 / 98
  • 12. La construction d'application Quelques rappels ... Edition des liens 6 L'edition des liens est un processus qui permet de creer des
  • 13. chiers executables ou des bibliotheques dynamiques ou statiques, a partir de
  • 14. chiers objets. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 9 / 98
  • 15. La construction d'application Quelques rappels ... Un peu de compilation donc ... Exemple en C sous UNIX Il faut deja organiser un peu ses
  • 16. chiers, par exemple Pour C/C++, speration des declarations et implementations Pour Java, regroupement par package ... Ensuite organiser son code : #ifdef DEBUG pour C par exemple (a activer sur la ligne de commande : gcc -DDEBUG=1
  • 17. chier.c) Pour Java, regroupement par package ... cc : Supprime les commentaires, eectue les inclusions et les macros,... cc1 : Converti le code C en assembleur as : Assemblage des
  • 19. chiers objets ld : Determine les adresses memoires des symboles et lie les
  • 20. chiers objets entre eux Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 10 / 98
  • 21. La construction d'application Quelques rappels ... La construction dans le monde reel Cette suite semble
  • 22. xe et standard et donc totalement automatisable ! Mais en realite : Plusieurs langages avec chacun ses speci
  • 23. cites Des variantes dans les langages (gtk vs Qt par exemple) Problemes du multiplateforme/architecture/distribution Grand nombre de
  • 24. chiers et de cibles Il faut des outils pour assister le developpeur dans cette phase. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 11 / 98
  • 25. La construction d'application Quelques rappels ... La construction d'applications C/C++ Cette presentation n'illustrera que les principes les plus courants de la construction d'applications C/C++ On ne parlera que tres peu des systemes embarques dans les IDE On laissera les problemes lies aux compilateurs de c^otes On ne parlera que tres peu des outils/besoins post-compilation (test unitaires, packaging, etc ...) Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 12 / 98
  • 26. La construction d'application Quelques rappels ... A long time ago, in a galaxy far far away... 9 Jusqu'a la
  • 27. n des annees 70, les programmes etaient petits. En 1977, le Dr Stuart I Feldman (Bell Labs) invente l'outil Make L'outil rencontre un succes immediat. En 1997, Peter Miller ecrit l'article : Recursive Make Considered Harmful7. Depuis de nombreux outils essayent d'ameliorer de processus 8. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 13 / 98
  • 29. le La syntaxe du Make
  • 30. le Le
  • 32. le est compose de plusieurs regles de la forme : cible : dependances TAB commandes cible : dependances TAB commandes Chaque commande est precedee d'une tabulation : Make
  • 33. le prog : main.o functions .o gcc o prog main.o functions .o main.o : main.c functions .h gcc c main.c functions .o : functions .c functions .h gcc c functions .c Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 14 / 98
  • 35. le Les evaluations de regles Lors de l'utilisation de la commande make cible Evaluation de la regle dont la cible est passee en argument a make Evaluation de la premiere regle rencontree (s'il n'y a pas d'argument) Les dependances sont analysees Si une dependance n'est pas a jour on tente de la resoudre Si cette dependance est cible d'une autre regle du Make
  • 36. le alors cette regle est a son tour evaluee Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 15 / 98
  • 38. le Les cibles classiques all Generation de toutes les cibles .PHONY Les dependances de cette cible sont toujours regenerees clean Suppression des
  • 39. chiers intermediaires Mproper / distclean clean+ suppression des
  • 40. chiers cibles Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 16 / 98
  • 42. le Les variables Declaration de variables via NOM=VALEUR. Les variables traditionnelles : CFLAGS : options du compilatuer C (CXXFLAGS pour C++) LDFLAGS : options de l'editeur de liens ... Les variables internes : $@ : la cible $ : la 1ere dependance $^ : la liste des dependances $* : le nom de la cible sans suxe Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 17 / 98
  • 44. le Et plus encore ... Les conditionnelles : ifeq .... else .... endif La recherche de dependances : Utilisation de la variable VPATH/vpath (VPATH = src :../headers) Les appels imbriques : cd $(SRC DIR) $(MAKE) $@ Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 18 / 98
  • 45. La construction d'application Les limitations et les solutions Quels reproches au Make ancestral ? Pas vraiment portable/multiplateforme : base sur des scripts shell et des proprietes du systeme de
  • 46. chiers. De plus les evolutions des descandants (GNU Make, ...) ont des implementations particulieres pour les fonctions manquantes (if-then-else par exemple). Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 19 / 98
  • 47. La construction d'application Les limitations et les solutions Quels reproches au Make ancestral ? Pas vraiment portable/multiplateforme : base sur des scripts shell et des proprietes du systeme de
  • 48. chiers. De plus les evolutions des descandants (GNU Make, ...) ont des implementations particulieres pour les fonctions manquantes (if-then-else par exemple). Diculte a monter en charge : L'evolution du code qui est necessaire dans les gros projets s'articule souvent autour de changement d'arborescence ou de renommage de partie de code. Ceci entraine de nombreux changements manuels dans les Make
  • 49. le. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 19 / 98
  • 50. La construction d'application Les limitations et les solutions Quels reproches au Make ancestral ? Pas vraiment portable/multiplateforme : base sur des scripts shell et des proprietes du systeme de
  • 51. chiers. De plus les evolutions des descandants (GNU Make, ...) ont des implementations particulieres pour les fonctions manquantes (if-then-else par exemple). Diculte a monter en charge : L'evolution du code qui est necessaire dans les gros projets s'articule souvent autour de changement d'arborescence ou de renommage de partie de code. Ceci entraine de nombreux changements manuels dans les Make
  • 52. le. Le langage du Make
  • 53. le ajoute une complexite qui n'a pas de raison d'^etre. De plus il est relativement limite. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 19 / 98
  • 54. La construction d'application Les limitations et les solutions Quels reproches au Make ancestral ? Pas vraiment portable/multiplateforme : base sur des scripts shell et des proprietes du systeme de
  • 55. chiers. De plus les evolutions des descandants (GNU Make, ...) ont des implementations particulieres pour les fonctions manquantes (if-then-else par exemple). Diculte a monter en charge : L'evolution du code qui est necessaire dans les gros projets s'articule souvent autour de changement d'arborescence ou de renommage de partie de code. Ceci entraine de nombreux changements manuels dans les Make
  • 56. le. Le langage du Make
  • 57. le ajoute une complexite qui n'a pas de raison d'^etre. De plus il est relativement limite. Les veri
  • 58. cations d'evolutions de code sont super
  • 59. cielles. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 19 / 98
  • 60. La construction d'application Les limitations et les solutions Quels reproches au Make ancestral ? Pas vraiment portable/multiplateforme : base sur des scripts shell et des proprietes du systeme de
  • 61. chiers. De plus les evolutions des descandants (GNU Make, ...) ont des implementations particulieres pour les fonctions manquantes (if-then-else par exemple). Diculte a monter en charge : L'evolution du code qui est necessaire dans les gros projets s'articule souvent autour de changement d'arborescence ou de renommage de partie de code. Ceci entraine de nombreux changements manuels dans les Make
  • 62. le. Le langage du Make
  • 63. le ajoute une complexite qui n'a pas de raison d'^etre. De plus il est relativement limite. Les veri
  • 64. cations d'evolutions de code sont super
  • 65. cielles. Il n'y pas de systeme de detection implicite de dependances Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 19 / 98
  • 66. La construction d'application Les limitations et les solutions Ce qui a change aussi ... Precedement : Compiler votre code Faire la liaison avec les librairies (statiques/dynamiques) Distribuer sous forme de sources ou de binaires Maintenant, en plus : Executer les tests unitaires (voir fonctionnels) Faire un Installeur (msi, deb, rpm, installshield, ...) Gerer les problematiques d'internationalisation Generer la documentation developpeur et utilisateur, les metriques, ... A ceci s'ajoute une tendance depuis 2000 : l'integration continue Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 20 / 98
  • 67. La construction d'application Les limitations et les solutions La notion d'integration continue 10 L'idee : veri
  • 68. er a chaque modi
  • 69. cation de code source que le resultat des modi
  • 70. cations ne produit pas de regression du logiciel (donc l'executable, mais aussi la documentation, les metriques, ...) Ceci implique donc une construction rapide exible standardisee (un minimum d'outils) identique pour toutes les cibles (OS, architecture, ...) A partir de la, nous pouvons imaginer la production de livrables, de versions journalieres(nightly build), des deploiements automatiques, la generation automatique de l'historique (release notes), etc ... Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 21 / 98
  • 71. La construction d'application Les limitations et les solutions Evolution forte au milieu des annees 90 Apparition des methodes agiles Developpement du marche Web Augmentation des langages et plateformes Croissance de l'opensource L'ensemble de ces facteurs pousse a avoir un systeme optimum pour la construction d'application. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 22 / 98
  • 72. La construction d'application Les limitations et les solutions Vraiment un probleme nouveau ? Debut des annees 90 : imake pour XFree86 Cygnus et les gcc con
  • 73. gure script pour les outils GNU autoconf C'est cette derniere initiative qui f^ut la bonne. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 23 / 98
  • 74. La construction d'application Les limitations et les solutions La reponse du monde libre Creation d'autoconf en 1991 par David J. MacKenzie : apparition du script con
  • 77. le.in Utilisation de m4 et adoption des conventions issues de GNU Puis passage au con
  • 79. n, 1994-09-19 First CVS commit11 Le choix qui a ete fait ici a ete de s'appuyer sur les fonctionnalites presentes sur le systeme en les testant (la partie con
  • 80. gure), d'utiliser des outils de construction traditionnels (make, ...) et d'installer le produit de la compilation suivant des standards. De plus, il n'y aucun lien avec les environnements de travail des developpeurs (IDE). Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 24 / 98
  • 81. La construction d'application Les limitations et les solutions Les autres reponses qui ont suivies Ant, http://ant.apache.org CMake, http://www.cmake.org Jam/BJam, http://www.perforce.com/jam/jam.html Maven, http://maven.apache.org MSBuild, http://http://en.wikipedia.org/wiki/MSBuild Qmake, http://en.wikipedia.org/wiki/Qmake Scons, http://www.scons.org Sconspiracy, http://code.google.com/p/sconspiracy Waf, http://code.google.com/p/waf Attention au syndrome du NIH : Not Invented Here 12 Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 25 / 98
  • 82. La construction d'application Les limitations et les solutions Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 26 / 98
  • 83. GNU Autotools 2. GNU Autotools Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 27 / 98
  • 84. GNU Autotools Sommaire GNU Autotools Les bases de GNU Autotools GNU Autotools dans le detail La gestion des bilbiotheques Conclusion Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 28 / 98
  • 85. GNU Autotools Les bases de GNU Autotools Les references Les sources d'informations qui ont ete utilisees pour cette partie : http ://www.gnu.org/software/autoconf/ http ://en.wikipedia.org/ http ://sourceware.org/autobook/ http ://www.lrde.epita.fr/ adl/autotools.html http ://www.infres.enst.fr/ dax/polys/con
  • 86. gure/ http ://fsmsh.com/2754 Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 29 / 98
  • 87. GNU Autotools Les bases de GNU Autotools GNU Autotools Licence GPL, cree en 1992 Ecrit en shell + m4 Combinaison d'outils Generation automatique de make
  • 90. gures automatiquement selon la plateforme Bonne portabilite des developpements Construction simple et transparente pour l'utilisateur : ./con
  • 91. gure,make,make install Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 30 / 98
  • 92. GNU Autotools Les bases de GNU Autotools GNU Autotools, un ensemble d'outils Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 31 / 98
  • 93. GNU Autotools Les bases de GNU Autotools On peut simpli
  • 94. er un peu... On peut simpli
  • 95. er les 1eres etapes : autoreconf La sequence serait donc : Creation du con
  • 97. le.am Lancement de autoreconf {install Lancement de con
  • 98. gure Lancement de make Lnacement de make install Bon allez, on se lance... Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 32 / 98
  • 99. GNU Autotools Les bases de GNU Autotools Notre petit Hello World src/main.c #include stdio.h int main(int argc, char* argv []) f printf (Hello Worldnn); return 0; g Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 33 / 98
  • 100. GNU Autotools Les bases de GNU Autotools Les 3
  • 102. gure.ac AC_INIT([amhello], [1.0], [bug-report@address]) AM_INIT_AUTOMAKE([foreign -Wall -Werror]) AC_PROG_CC AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile src/Makefile]) AC_OUTPUT Make
  • 103. le.am SUBDIRS = src src/Make
  • 104. le.am bin_PROGRAMS = hello hello_SOURCES = main.c Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 34 / 98
  • 105. GNU Autotools GNU Autotools dans le detail Notre con
  • 107. gure.ac AC_INIT([amhello], [1.0], [bug-report@address]) AM_INIT_AUTOMAKE([foreign -Wall -Werror]) AC_PROG_CC AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile src/Makefile]) AC_OUTPUT Initialisation Autoconf (nom, version, @ de support, ...) Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 35 / 98
  • 108. GNU Autotools GNU Autotools dans le detail Notre con
  • 110. gure.ac AC_INIT([amhello], [1.0], [bug-report@address]) AM_INIT_AUTOMAKE([foreign -Wall -Werror]) AC_PROG_CC AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile src/Makefile]) AC_OUTPUT Initialisation Autoconf (nom, version, @ de support, ...) Initialisation Automake (remonte les erreurs, ...) Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 35 / 98
  • 111. GNU Autotools GNU Autotools dans le detail Notre con
  • 113. gure.ac AC_INIT([amhello], [1.0], [bug-report@address]) AM_INIT_AUTOMAKE([foreign -Wall -Werror]) AC_PROG_CC AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile src/Makefile]) AC_OUTPUT Initialisation Autoconf (nom, version, @ de support, ...) Initialisation Automake (remonte les erreurs, ...) Utilisation du compilateur C Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 35 / 98
  • 114. GNU Autotools GNU Autotools dans le detail Notre con
  • 116. gure.ac AC_INIT([amhello], [1.0], [bug-report@address]) AM_INIT_AUTOMAKE([foreign -Wall -Werror]) AC_PROG_CC AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile src/Makefile]) AC_OUTPUT Initialisation Autoconf (nom, version, @ de support, ...) Initialisation Automake (remonte les erreurs, ...) Utilisation du compilateur C Declare con
  • 117. g.h pour les ent^etes Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 35 / 98
  • 118. GNU Autotools GNU Autotools dans le detail Notre con
  • 120. gure.ac AC_INIT([amhello], [1.0], [bug-report@address]) AM_INIT_AUTOMAKE([foreign -Wall -Werror]) AC_PROG_CC AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile src/Makefile]) AC_OUTPUT Initialisation Autoconf (nom, version, @ de support, ...) Initialisation Automake (remonte les erreurs, ...) Utilisation du compilateur C Declare con
  • 121. g.h pour les ent^etes Declare Make
  • 123. le Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 35 / 98
  • 124. GNU Autotools GNU Autotools dans le detail Notre con
  • 126. gure.ac AC_INIT([amhello], [1.0], [bug-report@address]) AM_INIT_AUTOMAKE([foreign -Wall -Werror]) AC_PROG_CC AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile src/Makefile]) AC_OUTPUT Initialisation Autoconf (nom, version, @ de support, ...) Initialisation Automake (remonte les erreurs, ...) Utilisation du compilateur C Declare con
  • 127. g.h pour les ent^etes Declare Make
  • 131. es Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 35 / 98
  • 132. GNU Autotools GNU Autotools dans le detail con
  • 133. gure.ac en version plus complete con
  • 134. gure.ac # Prelude. AC_INIT([amhello], [1.0], [bug-report@address]) AM_INIT_AUTOMAKE([foreign -Wall -Werror]) # Veri
  • 135. cations pour les programmes AC_PROG_CC # Veri
  • 136. cations pour les bibliotheques # Veri
  • 137. cations pour les ent^etes # Veri
  • 138. cations pour les typedefs, les structures, les options de compilateurs # Generation de
  • 139. chiers AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile src/Makefile]) AC_OUTPUT Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 36 / 98
  • 140. GNU Autotools GNU Autotools dans le detail Exemples de veri
  • 141. cations (et aectations) de programmes AC_PROG_CC, AC_PROG_CXX, AC_PROG_F77, ... Veri
  • 142. cations pour les compilateurs Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 37 / 98
  • 143. GNU Autotools GNU Autotools dans le detail Exemples de veri
  • 144. cations (et aectations) de programmes AC_PROG_CC, AC_PROG_CXX, AC_PROG_F77, ... Veri
  • 145. cations pour les compilateurs AC_PROG_SED, AC_PROG_YACC, AC_PROG_LEX, ... Veri
  • 146. cations pour les utilitaires Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 37 / 98
  • 147. GNU Autotools GNU Autotools dans le detail Exemples de veri
  • 148. cations (et aectations) de programmes AC_PROG_CC, AC_PROG_CXX, AC_PROG_F77, ... Veri
  • 149. cations pour les compilateurs AC_PROG_SED, AC_PROG_YACC, AC_PROG_LEX, ... Veri
  • 150. cations pour les utilitaires AC_CHECK_PROGS(VAR, PROGS, [VAL-IF-NOT-FOUND]) VAR est positionne sur le 1er PROGS trouve, si rien n'est trouve alors VAL-IF-NOT-FOUND. AC_CHECK_PROGS([TAR], [tar gtar], [:]) if test $TAR = :; then AC_MSG_ERROR([Ce paquet a besoin de tar.]) fi Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 37 / 98
  • 151. GNU Autotools GNU Autotools dans le detail Les macros utiles dans autoconf AC_MSG_ERROR(ERROR-DESCRIPTION, [EXIT-STATUS]) Ache ERROR-DESCRIPTION (con
  • 152. g.log) et arr^ete `configure'. AC_MSG_WARN(ERROR-DESCRIPTION) Pareil, mais n'arr^ete pas Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 38 / 98
  • 153. GNU Autotools GNU Autotools dans le detail Les macros utiles dans autoconf AC_MSG_ERROR(ERROR-DESCRIPTION, [EXIT-STATUS]) Ache ERROR-DESCRIPTION (con
  • 154. g.log) et arr^ete `configure'. AC_MSG_WARN(ERROR-DESCRIPTION) Pareil, mais n'arr^ete pas AC_DEFINE(VARIABLE, VALUE, DESCRIPTION) Ajoute les informations dans con
  • 155. g.h. /* DESCRIPTION */ #define VARIABLE VALUE Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 38 / 98
  • 156. GNU Autotools GNU Autotools dans le detail Les macros utiles dans autoconf AC_MSG_ERROR(ERROR-DESCRIPTION, [EXIT-STATUS]) Ache ERROR-DESCRIPTION (con
  • 157. g.log) et arr^ete `configure'. AC_MSG_WARN(ERROR-DESCRIPTION) Pareil, mais n'arr^ete pas AC_DEFINE(VARIABLE, VALUE, DESCRIPTION) Ajoute les informations dans con
  • 158. g.h. /* DESCRIPTION */ #define VARIABLE VALUE AC_SUBST(VARIABLE, [VALUE]) Fixe $(VARIABLE) comme VALUE dans Make
  • 159. le. AC_SUBST([FOO], [foo]) FOO=foo AC_SUBST([FOO]) AC_SUBST([FOO]) FOO=foo Les 3 ecritures sont equivalentes Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 38 / 98
  • 160. GNU Autotools GNU Autotools dans le detail Veri
  • 161. cation pour les bibliotheques AC_CHECK_LIB(LIBRARY, FUNCT, [ACT-IF-FOUND], [ACT-IF-NOT]) Veri
  • 162. e si la LIBRARY existe et si elle contient FUNCT. Si oui, execute ACT-IF-FOUND sinon ACT-IF-NOT. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 39 / 98
  • 163. GNU Autotools GNU Autotools dans le detail Veri
  • 164. cation pour les bibliotheques AC_CHECK_LIB(LIBRARY, FUNCT, [ACT-IF-FOUND], [ACT-IF-NOT]) Veri
  • 165. e si la LIBRARY existe et si elle contient FUNCT. Si oui, execute ACT-IF-FOUND sinon ACT-IF-NOT. AC_CHECK_LIB([efence], [malloc], [EFENCELIB=-lefence]) AC_SUBST([EFENCELIB]) $(EFENCELIB) pourra ^etre utilise plus tard Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 39 / 98
  • 166. GNU Autotools GNU Autotools dans le detail Veri
  • 167. cation pour les ent^etes AC_CHECK_HEADERS(HEADERS...) Veri
  • 168. e la presence de HEADERS et positionne #define HAVE_HEADER_H pour chacun. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 40 / 98
  • 169. GNU Autotools GNU Autotools dans le detail Veri
  • 170. cation pour les ent^etes AC_CHECK_HEADERS(HEADERS...) Veri
  • 171. e la presence de HEADERS et positionne #define HAVE_HEADER_H pour chacun. AC_CHECK_HEADERS([sys/param.h unistd.h]) AC_CHECK_HEADERS([wchar.h]) #de
  • 172. ne HAVE_SYS_PARAM_H, HAVE_UNISTD_H, and HAVE_WCHAR_H. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 40 / 98
  • 173. GNU Autotools GNU Autotools dans le detail Veri
  • 174. cation pour les ent^etes AC_CHECK_HEADERS(HEADERS...) Veri
  • 175. e la presence de HEADERS et positionne #define HAVE_HEADER_H pour chacun. AC_CHECK_HEADERS([sys/param.h unistd.h]) AC_CHECK_HEADERS([wchar.h]) #de
  • 176. ne HAVE_SYS_PARAM_H, HAVE_UNISTD_H, and HAVE_WCHAR_H. #if HAVE UNISTD H # include unistd.h #endif Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 40 / 98
  • 177. GNU Autotools GNU Autotools dans le detail Veri
  • 178. cation pour les ent^etes AC_CHECK_HEADERS(HEADERS...) Veri
  • 179. e la presence de HEADERS et positionne #define HAVE_HEADER_H pour chacun. AC_CHECK_HEADERS([sys/param.h unistd.h]) AC_CHECK_HEADERS([wchar.h]) #de
  • 180. ne HAVE_SYS_PARAM_H, HAVE_UNISTD_H, and HAVE_WCHAR_H. #if HAVE UNISTD H # include unistd.h #endif AC_CHECK_HEADER(HEADER, [ACT-IF-FOUND], [ACT-IF-NOT]) Utile pour veri
  • 181. er uniquement les ent^etes (sans les DEFINE) Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 40 / 98
  • 182. GNU Autotools GNU Autotools dans le detail Les Make
  • 184. le.am SUBDIRS = src src/Make
  • 185. le.am bin_PROGRAMS = hello hello_SOURCES = main.c SUBDIRS pour les sous-repertoire a prendre en compte bin PROGRAMS executable a generer (a separer par des espaces) target SOURCES .... Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 41 / 98
  • 186. GNU Autotools GNU Autotools dans le detail La declaration des cibles Make
  • 187. le.am lieu_TYPE = cibles ... Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 42 / 98
  • 188. GNU Autotools GNU Autotools dans le detail La declaration des cibles Make
  • 189. le.am lieu_TYPE = cibles ... les cibles seront construites commes (TYPE) _PROGRAMS _LIBRARIES _LTLIBRARIES _HEADERS _SCRIPTS _DATA Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 42 / 98
  • 190. GNU Autotools GNU Autotools dans le detail La declaration des cibles Make
  • 191. le.am lieu_TYPE = cibles ... les cibles seront installees dans (lieu) bin_ $(bindir) lib_ $(libdir) les cibles seront construites commes (TYPE) _PROGRAMS _LIBRARIES _LTLIBRARIES _HEADERS _SCRIPTS _DATA Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 42 / 98
  • 192. GNU Autotools La gestion des bibliotheques Les bibliotheques Ajouter AC_PROG_RANLIB dans con
  • 193. gure.ac. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 43 / 98
  • 194. GNU Autotools La gestion des bibliotheques Les bibliotheques Ajouter AC_PROG_RANLIB dans con
  • 196. le.am lib_LIBRARIES = libfoo.a libbar.a libfoo_a_SOURCES = foo.c privfoo.h libbar_a_SOURCES = bar.c privbar.h include_HEADERS = foo.h bar.h Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 43 / 98
  • 197. GNU Autotools La gestion des bibliotheques Les bibliotheques Ajouter AC_PROG_RANLIB dans con
  • 199. le.am lib_LIBRARIES = libfoo.a libbar.a libfoo_a_SOURCES = foo.c privfoo.h libbar_a_SOURCES = bar.c privbar.h include_HEADERS = foo.h bar.h Ces bibliotheques seront installees dans $(libdir). Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 43 / 98
  • 200. GNU Autotools La gestion des bibliotheques Les bibliotheques Ajouter AC_PROG_RANLIB dans con
  • 202. le.am lib_LIBRARIES = libfoo.a libbar.a libfoo_a_SOURCES = foo.c privfoo.h libbar_a_SOURCES = bar.c privbar.h include_HEADERS = foo.h bar.h Ces bibliotheques seront installees dans $(libdir). Le nom des bilbiotheques doivent correspondre a lib*.a. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 43 / 98
  • 203. GNU Autotools La gestion des bibliotheques Les bibliotheques Ajouter AC_PROG_RANLIB dans con
  • 205. le.am lib_LIBRARIES = libfoo.a libbar.a libfoo_a_SOURCES = foo.c privfoo.h libbar_a_SOURCES = bar.c privbar.h include_HEADERS = foo.h bar.h Ces bibliotheques seront installees dans $(libdir). Le nom des bilbiotheques doivent correspondre a lib*.a. Les ent^etes publiques seront installees dans $(includedir). Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 43 / 98
  • 206. GNU Autotools La gestion des bibliotheques Les bibliotheques Ajouter AC_PROG_RANLIB dans con
  • 208. le.am lib_LIBRARIES = libfoo.a libbar.a libfoo_a_SOURCES = foo.c privfoo.h libbar_a_SOURCES = bar.c privbar.h include_HEADERS = foo.h bar.h Ces bibliotheques seront installees dans $(libdir). Le nom des bilbiotheques doivent correspondre a lib*.a. Les ent^etes publiques seront installees dans $(includedir). Les ent^etes privees ne seront pas installees Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 43 / 98
  • 209. GNU Autotools Conclusion Conclusion sur les GNU Autotools Les contres : Pour beaucoup Autotools est synonyme d'Autohell 13 : de nombreuses options et documentations. La gestion des dependances et des decouvertes des
  • 210. chiers est en partie manuelle si elle n'est pas en arborescence traditionnelle. L'utilisation de m4 est complexe. Sous Win32/Win64, seul Cygwin/MinGW est supporte. Les pours : De loin, l'outils le plus complet et puissant. L'utilisation des arborescences de distributionest parfaite. Et donc la distribution (packaging) quasi-automatique. La documentation est tres complete. Ils sont utilises par des milliers de projets. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 44 / 98
  • 211. GNU Autotools Conclusion Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 45 / 98
  • 212. CMake 3. CMake Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 46 / 98
  • 213. CMake Sommaire CMake Les bases de CMake La gestion des bibliotheques CMake dans le detail Conclusion Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 47 / 98
  • 214. CMake Les bases de CMake Les references Les sources d'informations qui ont ete utilisees pour cette partie : http ://www.projet-plume.org/fr/
  • 215. che/cmake http ://fr.wikipedia.org/wiki/CMake http ://www.cmake.org/cmake/help/documentation.html http ://www.elpauer.org/stu/learning cmake.pdf Mastering CMake - Published by Kitware, Inc. - ISBN 1-930934-09-2 Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 48 / 98
  • 216. CMake Les bases de CMake CMake Licence BSD Cree en 2000 Ecrit en C++, se compile avec make/g++ ou Visual C++ Syntaxe maison dans un
  • 217. chier : CMakeLists.txt Outil binaire monolithique Multiplateforme (POSIX systems, Windows) Generation automatique de make
  • 218. le en fonction de la plateforme Make
  • 220. gures automatiquement selon la plateforme Bonne portabilite des developpements Generation des espaces de travail (Kdevelopp, XCode, MSVC, ...) Petits extras : SWIG, Graphviz, CDash, CPack, CTest Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 49 / 98
  • 221. CMake Les bases de CMake Les projets qui utilisent CMake ITK, VTK, VXL, ParaView, Slicer, gdcm KDE 14 Second Life clang, LLVM ... Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 50 / 98
  • 222. CMake Les bases de CMake Mode operatoire Creer et parametrer un
  • 223. chier CMakeLists.txt dans chaque repertoire du projet. Utiliser la commande cmake Construction dans les sources du projet cmake . Construction hors des sources du projet cmake path vers sources du projet Generation des
  • 225. le, ou .dsp, ou .sln, ... Utilisables par les outils natifs L'ensemble est mis en cache dans CMakeCache.txt (genere lors du 1er appel a cmake) : Con
  • 226. guration de la construction (variables et valeurs) En cas de probleme : modi
  • 227. cation manuelle ou via ccmake Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 51 / 98
  • 228. CMake Les bases de CMake Les 3
  • 229. chiers a editer pour notre petit HelloWorld src/main.c #include stdio.h int main(int argc, char* argv []) f printf (Hello Worldnn); return 0; g CMakeLists.txt PROJECT(hello) SUBDIRS(src) src/CMakeLists.txt ADD_EXECUTABLE(hello main.c) Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 52 / 98
  • 230. CMake La gestion des bibliotheques Un exemple de bibliotheque : libfoo src/CMakeLists.txt INCLUDE_DIRECTORIES($CMAKE_SOURCE_DIR/foo) LINK_DIRECTORIES($CMAKE_BINARY_DIR/foo) ADD_EXECUTABLE(hello main.c) TARGET_LINK_LIBRARIES(hello foo) CMakeLists.txt PROJECT(hello) SUBDIRS(foo src) foo/CMakeLists.txt ADD_LIBRARY(foo STA- TIC foo.c) foo/CMakeLists.txt ADD_LIBRARY(foo SHA- RED foo.c) Librairie statique (.a/.lib) ou librairie dynamique (.so/.dll/.dylib) L'ordre des repertoires est important. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 53 / 98
  • 231. CMake CMake dans le detail Les possibilites du CMakeLists.txt Langage de script avec une syntaxe simple Les commentaires avec : # Les commandes en : COMMAND(arg1 arg2 ...) Les listes en : A;B;C Les variables en $VAR Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 54 / 98
  • 232. CMake CMake dans le detail Les structures de contr^oles Conditionnelles IF(CONDITION) MESSAGE(Yes) ELSE(CONDITION) MESSAGE(No) ENDIF(CONDITION) Boucles FOREACH(c A B C) MESSAGE($c: $$c) ENDFOREACH(c) Macros MACRO(MY_MACRO arg1 arg2) SET($arg1 $$arg2) ENDMACRO(MY_MACRO) MY_MACRO(A B) Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 55 / 98
  • 233. CMake CMake dans le detail Composition : Macro Composition de commandes existantes via l'utilisaiton de macros MACRO (CREATE_EXECUTABLE NAME SOURCES LIBRARIES) ADD_EXECUTABLE($NAME $SOURCES) TARGET_LINK_LIBRARIES($NAME $LIBRARIES) ENDMACRO(CREATE_EXECUTABLE) ADD_LIBRARY(foo main.c) CREATE_EXECUTABLE(hell main.c foo) Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 56 / 98
  • 234. CMake CMake dans le detail Creation de variables Creation de variables booleennes - Utilisation en ligne de commande OPTION(DEBUG Programme en mode DEBUG OFF) IF(DEBUG) SET_SOURCE_FILES_PROPERTIES(main.c COMPILE_FLAGS -DDEBUG) ENDIF(DEBUG) $ cmake -DDEBUG :BOOL=ON Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 57 / 98
  • 235. CMake CMake dans le detail Quelques remarques sur cmake ... Pensez a utiliser : cmake {help pour l'aide glolabe cmake {help COMMAND pour une aide detaillee : cmake {help IF SET(CMAKE VERBOSE MAKEFILE on) Il est possible de passer des parametres sur la ligne de commande : par exemple -G pour selectionner le systeme de construction cible par exemple -D pour mettre des variables en cache $ cmake ../Foo -GVisual Studio 10 -DFOOBAR :BOOL=1 Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 58 / 98
  • 236. CMake CMake dans le detail La GUI : NCurses Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 59 / 98
  • 237. CMake CMake dans le detail La GUI : Windows Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 60 / 98
  • 238. CMake CMake dans le detail Les modules CMake propose des modules FIND LIBRARY a
  • 239. n de trouver les librairies externes utiles pour votre construction : Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 61 / 98
  • 240. CMake CMake dans le detail Les modules, suite PROJECT( myProject ) FIND_PACKAGE ( PNG ) IF ( PNG_FOUND ) INCLUDE( $PNG_USE_FILE ) ENDIF( PNG_FOUND ) ADD_EXECUTABLE( myProject myProject.cxx ) TARGET_LINK_LIBRARIES ( myProject PNG) Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 62 / 98
  • 241. CMake CMake dans le detail Generation d'un paquet Outil annexe : CPack, pour generer des paquets : Linux RPM, deb et gzip NSIS (pour Microsoft Windows) Mac OS X packages (dmg + pkg) Ajout de INCLUDE(CPack) dans le CMakeLists.txt de base. Puis : cmake . make package make package source Le param^etrage se fait dans CPackSourceCon
  • 242. g.cmake Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 63 / 98
  • 243. CMake Conclusion Conclusion sur CMake Les contres : Syntaxe propre Flexibilite restreinte (bien pense quand m^eme !) Comme les GNU Autotools, ce n'est pas un systeme de construction : C'est un generateur de
  • 245. guration pour les systemes de construction Les pours : Communaute croissante (et KDE!) Tres interessant dans le contexte scienti
  • 246. que (imagerie) Vrai multiplateforme / pas uniquement POSIX Les ajouts : CPack, CDash, CTest Les Modules (+250 dans la derniere version) GUI de con
  • 248. guration (librairie partagee, debug, etc ...) Outil tres stable Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 64 / 98
  • 249. CMake Conclusion Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 65 / 98
  • 250. SCons 4. SCons Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 66 / 98
  • 251. SCons Sommaire SCons Les bases de SCons La gestion des bibliotheques SCons dans le detail Exemple de specialisation : SConspiracy Conclusion Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 67 / 98
  • 252. SCons Les bases de SCons Les references Les sources d'informations qui ont ete utilisees pour cette partie : http ://www.projet-plume.org/fr/
  • 253. che/scons http ://fr.wikipedia.org/wiki/SCons http ://www.scons.org/documentation.php Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 68 / 98
  • 254. SCons Les bases de SCons SCons Licence MIT Cree en 2000 (suite au projet Cons en Perl) Ecrit en python Syntaxe python dans des
  • 255. chiers SConstruct Outil interprete Multiplateforme (sur toutes les plateformes avec Python) Remplace make, nmake.exe, msbuild.exe, etc ... Detection des outils de compilation, d'edition des liens, ... Generation des espaces de travailMicrosoft Petits extras : SWIG, Graphviz, CDash, CPack, CTest Support pour C, C++, D, Java, Fortran, Yacc, Tex, Qt, SWIG, ... Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 69 / 98
  • 256. SCons Les bases de SCons Les projets qui utilisent SCons VMWare Google Chrome Doom3 Blender NumPy/SciPy Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 70 / 98
  • 257. SCons Les bases de SCons Mode operatoire Creer et parametrer un
  • 258. chier SConstruct a la racine et des
  • 259. chiers SConscript dans chaque repertoire du projet. Utiliser la commande scons scons L'ensemble des informations intermediaires est mis en cache dans le
  • 260. chier .sconsign.dblite Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 71 / 98
  • 261. SCons Les bases de SCons Les 3
  • 262. chiers a editer pour notre petit HelloWorld src/main.c #include stdio.h int main(int argc, char* argv []) f printf (Hello Worldnn); return 0; g SConstruct SConscript('src/SConscript') src/SConscript Program('hello', ['main.c']) Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 72 / 98
  • 263. SCons La gestion des bibliotheques Un exemple de bibliotheque : libfoo src/SConscript Program('hello', ['main.c'], LIBS=['foo'], LIBPATH=['../foo'], CPPPATH=['../foo']) SConstruct SConscript (['src/SConscript','foo/SConscript']) L'ordre des repertoires n'est pas important. foo/SConscript StaticLibrary('foo',['foo.c']) foo/SConscript SharedLibrary('foo',['foo.c']) Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 73 / 98
  • 264. SCons SCons dans le detail Les possibilites du SConscript Pour faire simple, quasiment tout est possible ! C'est un
  • 265. chier qui est interprete en Python. Il est par exemple possible de de
  • 266. nir des environnements de construction : SConstruct opt = Environment(CCFLAGS = '-O2') dbg = Environment(CCFLAGS = '-g') opt.Program('foo', 'foo.c') dbg.Program('bar', 'bar.c') Al'execution scons -Q cc -o bar.o -c -g bar.c cc -o bar bar.o cc -o foo.o -c -O2 foo.c cc -o foo foo.o Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 74 / 98
  • 267. SCons SCons dans le detail Acher les variables ou copier l'environnement SConstruct dict = Environment().Dictionary() keys = dict.keys() keys.sort() for key in keys: print construction variable = '%s', va- lue = '%s' % (key, dict[key]) SConstruct env = Environment(CC = 'gcc') env.Program('foo', 'foo.c') env.Clone(CCFLAGS = '-O2').Program('foo-opt', 'foo.c') env.Clone(CCFLAGS = '-g').Program('foo-dbg', 'foo.c') Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 75 / 98
  • 268. SCons SCons dans le detail La reconstruction Timestamp comme Make
  • 269. les SConstruct Decider('timestamp-newer') Decider('make') Decider('timestamp-match') Checksum md5 (methode par defaut) SConstruct Decider('MD5') Combinaison des deux SConstruct Decider('MD5-timestamp') Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 76 / 98
  • 270. SCons SCons dans le detail Quelques remarques sur SCons Construction hors des sources SConstruct SConscript('src/SConscript', variant_dir='build') Manipulation des listes SConstruct Program('program', Glob('*.c')) Determiner la localisation d'une librairie (et placer dans CPPPATH) SConstruct env = Environment() env['CPPPATH'] = ['/lib/compat'] env.ParseConfig(pkg-config x11 -cflags -libs) Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 77 / 98
  • 271. SCons SCons dans le detail Quelques complements sur SCons Nettoyage des sources apres construction : scons -c VariantDir pour avoir un repertoire de sources propre Possibilite de faire des compilations distribuees Possibilite de mettre le cache sur un partage reseau ... Tres grande possibilite d'extension Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 78 / 98
  • 272. SCons SConspiracy Un exemple d'extension : SConspiracy Yams++ ) SConspiracy (racy) Construction d'application C++ Multiplateforme Orientee composant En environnement contr^ole Open source, Licence BSD http://code.google.com/p/sconspiracy/ Compatibilite avec Yams++ (anc^etre du projet) Remplace make, cmake, ... Python 2.6, SCons =1.3 pour la derniere version Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 79 / 98
  • 273. SCons SConspiracy Les Buts Utilises les avantages de SCons en essayant d'ajouter : Ajout/Con
  • 274. guration de projets souple et simple Respecter au maximum la philosophie DRY (Don't Repeat Yourself) Detection automatique de ce qui doit ^etre compile Obtenir un work ow de construction optimum Permettre facilement l'ajout ou l'evolution de fonctionnalite (plugins) Gestion uniforme et souple des bibliotheques externes Creation de packages binaires utilisables sous forme de bibliotheques externes Gestion de multiples projets independants ou a composants communs Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 80 / 98
  • 275. SCons SConspiracy Base de developpement et projets Un ou plusieurs repertoires contenant des projets Arborescence non structuree Noms de projets uniques, compose par [ga-zA-Z0-9f]+ Un projet ne peut pas se trouver dans le repertoire d'un autre projet Repertoire structure (Sources + ressources + con
  • 276. guration- Nom du repertoire ) nom du projet Structure du repertoire prj/bin/build.options prj/include prj/src prj/rc build.options (equivalent a un SConstruct ou CMakeLists.txt) variable necessaire : TYPE (shared, static, exec, bundle, ...) variables optionnelles : VERSION, LIB, USE, ... Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 81 / 98
  • 277. SCons SConspiracy Exemple de build.options Exemple de
  • 278. chier build.options : build.options TYPE = 'shared' VERSION = '0-4' LIB = ['core','utils'] USE = ['boost', 'vtk'] Tout ceci est du code Python, comme pour SConstruct Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 82 / 98
  • 279. SCons SConspiracy Exemple d'utilisation de SConspiracy build.options - 'hello' TYPE = 'exec' LIB = ['sconspirator 0.1'] build.options - 'sconspirator' TYPE = 'shared' VERSION = '0.1' build.options - 'hello' hello/bin/build.options hello/src/program.cpp build.options - 'sconspirator' sconspirator/bin/build.options sconspirator/include/SConspirator.hpp sconspirator/src/SConspirator.cpp Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 83 / 98
  • 280. SCons SConspiracy Application + libs Obj A instance de A::Indenter Instance de B::Obj Indenter Obj Obj B instance de A::Indenter Instance de A::Obj Obj F D Obj instance de A::Indenter Instance de B::Obj Obj C instance de A::Indenter Instance de B::Obj E instance de A::Indenter Instance de D::Obj Instance de F::Obj App Instance de E::Obj Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 84 / 98
  • 281. SCons SConspiracy Application + libs + libext A Indenter Obj Obj B instance de A::Indenter Instance de A::Obj Obj G Shared_ptr sur une instance de A::Indenter Shared_ptr sur une Instance de B::Obj AppBoost Instance de E::Obj Boost Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 85 / 98
  • 282. SCons Conclusion Conclusion sur SCons Les contres : Si mal con
  • 283. gure, il peut-^etre lent sur des gros projets Necessaire de le specialisera partir d'une certaine taille de projet. Generateur d'espace de travail pas aussi performant que CMake La recherche de librairie n'a pas les ajouts de CMake Avoir Python d'installe Les pours : Vraiment multiplateforme et extensible avec un langage connu Il ne produit pas des
  • 284. chiers pour construire, il construit Permet d'avoir des processus de construction maison, ce qui est necessaire a partir d'une certaine taille de projet/equipe Autocon
  • 285. guration (librairie partagee, warnings, etc ...) Complements extr^emement interessants (scons-addons, SConspiracy, sbf, swtoolkit, scons-plusplus, ...) Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 86 / 98
  • 286. SCons Conclusion Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 87 / 98
  • 287. Les autres 5. Les autres Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 88 / 98
  • 288. Les autres Sommaire Les autres Ant Maven Qmake Et de nombreux autres Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 89 / 98
  • 289. Les autres Ant Ant : Another Neat Tool 16 Ant 15 est sous licence Apache et a ete cree en 2000. Le projet est heberge par la fondation Apache et est ecrit en Java. Il permet de faire l'appel aux compilateurs, aux generateurs de documentation (Javadoc), aux generateurs de rapports, aux veri
  • 290. cateurs de style (checkstyle), ... Il peut ^etre utilise avec C/C++ via des contributions au projet Il est devenu omnipresent dans le monde Java. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 90 / 98
  • 291. Les autres Maven Maven 17 Maven est sous licence Apache et a ete cree en 2002. En gros, il reprend tout ce que fait Ant, mais essaye d'en simpli
  • 293. guration pour les gros projets. Il essaye de standardiser les projets. Il apporte une tres bonne gestion des dependances. Il a une orientation reseau (si les sources ne sont pas la, il va les chercher) Il n'y a plus de support pour C/C++ mais il en existe pour .Net La version 3 devrait support Ruby et Groovy Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 91 / 98
  • 294. Les autres qmake qmake 19 Outil de construction fournit avec Qt A l'origine TMake (un script Perl) M^eme architecture que TMake, dicile a maintenir Semble se faire petit a petit remplacer par CMake 18 Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 92 / 98
  • 295. Les autres Et de nombreux autres Waf Il s'agit d'un fork de SCons. Waf 20 est portable, leger, n'a que Python comme dependance. Il propose un vrai langage (Python) pour la con
  • 296. guration. Il support les cibles traditionnelles (buid, clean, install, ...) Il determine les dependances pour C/C++. Il supporte le langage D et OCaml. Il propose un mode daemon et un systeme de cache. Il est plus rapide que SCons dans certains cas Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 93 / 98
  • 297. Les autres Et de nombreux autres MSBuild et NAnt Pour les environnements DotNET, 2 outils interessant existent : MSBuild 21 a ete introduit avec Visual 2005. Il permet de generer le code .Net (C#, VB, ...). Ses
  • 299. gurations s'ecrivent en XML. Il a pour but de remplacer l'outils nmake.exe Le principal concurrent est NAnt. Il s'agit du pendant du projet Ant, mais celui est plus specialise pour .Net et est fait en C#. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 94 / 98
  • 300. Les autres Et de nombreux autres Et ce n'est pas
  • 301. ni J'en passe des dizaines : Gant Gradle Buildr Rant Rake ... Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 95 / 98
  • 302. Les autres Et de nombreux autres Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 96 / 98
  • 303. Conclusion Conclusion Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 97 / 98
  • 304. Conclusion Conclusion Synthese : CMake et SCons sont tres interessants et performants. Autotools est complexe mais impeccable sur POSIX. Pour du pur Java, Ruby, Python, etc ... Il existe des processus de construction specialisess. Conseils : Ne pas utiliser les systemes integres des IDE. Etudier en fonction de vos besoins. On peut remettre en cause le choix de l'outils, m^eme si c'est dicile. Vous pouvez gagner en ecacite et en visibilite sur votre projet. Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 98 / 98