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

Outils de construction pour la recherche

  • 1.
    ENVOL - Outilsde 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 Lebut 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 limitationset les solutions Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 5 / 98
  • 7.
    La construction d'applicationQuelques 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'applicationQuelques 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 enparam^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'applicationQuelques 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'applicationQuelques rappels ... Edition des liens 6 L'edition des liens est un processus qui permet de creer des
  • 13.
    chiers executables oudes bibliotheques dynamiques ou statiques, a partir de
  • 14.
    chiers objets. JohanMoreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 9 / 98
  • 15.
    La construction d'applicationQuelques 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
  • 18.
  • 19.
    chiers objets ld: Determine les adresses memoires des symboles et lie les
  • 20.
    chiers objets entreeux Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 10 / 98
  • 21.
    La construction d'applicationQuelques rappels ... La construction dans le monde reel Cette suite semble
  • 22.
    xe et standardet donc totalement automatisable ! Mais en realite : Plusieurs langages avec chacun ses speci
  • 23.
    cites Des variantesdans les langages (gtk vs Qt par exemple) Problemes du multiplateforme/architecture/distribution Grand nombre de
  • 24.
    chiers et decibles 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'applicationQuelques 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'applicationQuelques rappels ... A long time ago, in a galaxy far far away... 9 Jusqu'a la
  • 27.
    n des annees70, 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
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
    le est composede 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
  • 34.
  • 35.
    le Les evaluationsde 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
  • 37.
  • 38.
    le Les ciblesclassiques 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 JohanMoreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 16 / 98
  • 41.
  • 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
  • 43.
  • 44.
    le Et plusencore ... 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'applicationLes 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 plusles 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'applicationLes 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 plusles 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'applicationLes 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 plusles 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.
  • 53.
    le ajoute unecomplexite 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'applicationLes 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 plusles 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.
  • 57.
    le ajoute unecomplexite qui n'a pas de raison d'^etre. De plus il est relativement limite. Les veri
  • 58.
    cations d'evolutions decode sont super
  • 59.
    cielles. Johan Moreau(IRCAD) ENVOL - Outils de construction 27 septembre 2010 19 / 98
  • 60.
    La construction d'applicationLes 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 plusles 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.
  • 63.
    le ajoute unecomplexite qui n'a pas de raison d'^etre. De plus il est relativement limite. Les veri
  • 64.
    cations d'evolutions decode sont super
  • 65.
    cielles. Il n'ypas de systeme de detection implicite de dependances Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 19 / 98
  • 66.
    La construction d'applicationLes 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'applicationLes limitations et les solutions La notion d'integration continue 10 L'idee : veri
  • 68.
  • 69.
    cation de codesource que le resultat des modi
  • 70.
    cations ne produitpas 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'applicationLes 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'applicationLes limitations et les solutions Vraiment un probleme nouveau ? Debut des annees 90 : imake pour XFree86 Cygnus et les gcc con
  • 73.
    gure script pourles 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'applicationLes limitations et les solutions La reponse du monde libre Creation d'autoconf en 1991 par David J. MacKenzie : apparition du script con
  • 75.
  • 76.
  • 77.
    le.in Utilisation dem4 et adoption des conventions issues de GNU Puis passage au con
  • 78.
  • 79.
    n, 1994-09-19 FirstCVS 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'applicationLes 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'applicationLes 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 Lesbases 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 Lesbases de GNU Autotools GNU Autotools Licence GPL, cree en 1992 Ecrit en shell + m4 Combinaison d'outils Generation automatique de make
  • 88.
  • 89.
  • 90.
    gures automatiquement selonla plateforme Bonne portabilite des developpements Construction simple et transparente pour l'utilisateur : ./con
  • 91.
    gure,make,make install JohanMoreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 30 / 98
  • 92.
    GNU Autotools Lesbases de GNU Autotools GNU Autotools, un ensemble d'outils Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 31 / 98
  • 93.
    GNU Autotools Lesbases de GNU Autotools On peut simpli
  • 94.
    er un peu... On peut simpli
  • 95.
    er les 1eresetapes : autoreconf La sequence serait donc : Creation du con
  • 96.
  • 97.
    le.am Lancement deautoreconf {install Lancement de con
  • 98.
    gure Lancement demake Lnacement de make install Bon allez, on se lance... Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 32 / 98
  • 99.
    GNU Autotools Lesbases 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 Lesbases de GNU Autotools Les 3
  • 101.
  • 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 GNUAutotools dans le detail Notre con
  • 106.
  • 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 GNUAutotools dans le detail Notre con
  • 109.
  • 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 GNUAutotools dans le detail Notre con
  • 112.
  • 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 GNUAutotools dans le detail Notre con
  • 115.
  • 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 lesent^etes Johan Moreau (IRCAD) ENVOL - Outils de construction 27 septembre 2010 35 / 98
  • 118.
    GNU Autotools GNUAutotools dans le detail Notre con
  • 119.
  • 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 lesent^etes Declare Make
  • 122.