Final revision (fix compilation errors, ...)

This commit is contained in:
Némunaire 2012-06-19 18:15:40 +02:00
parent 91dd3a3e87
commit da7ef42d13
16 changed files with 94 additions and 53 deletions

View file

@ -6,7 +6,7 @@ On va écrire une description du makefile que l'on veut obtenir.
\subsection{AutoMake}
On crée la première règle bin_PROGRAMS, puis le/les noms des programmes que
On crée la première règle bin\_PROGRAMS, puis le/les noms des programmes que
l'on veut générer. Il s'agit d'une variable primaire.
hello-world sera installé dans bin/ avec make install. On peut changer le
prefix pour envoyer le fichier ailleurs.
@ -33,11 +33,11 @@ crochets autour des variables.
On retrouve des infos pour autoconf et automake.
AC_PREREQ vérifier la version requise.
\verb+AC_PREREQ+ vérifier la version requise.
AC_INIT : initialisation du package (nom, version, adresse de bug report)
\verb+AC_INIT+~: initialisation du package (nom, version, adresse de bug report)
AC_PROG_CXX : macro qui cherche un compilateur C++, on peut préciser le
\verb+AC_PROG_CXX+~: macro qui cherche un compilateur C++, on peut préciser le
compilateur obligatoire à utiliser (on lui passe en argument de
\texttt{./configure CXX=g++}) et il vérifie que le compilateur fonctionne (il
compile un petit code pour voir :p)
@ -46,13 +46,13 @@ Si le compilateur fonctionne pas par exemple, il dira ce qui va pas, plus de
détails sont dispo dans le fichier config.log (énormément !)
AC_CONFIG_FILES : fichiers à générer, typiquement des Makefiles !
\verb+AC_CONFIG_FILES+~: fichiers à générer, typiquement des Makefiles !
Il prend des fichiers en .in et il génére des fichiers dont le nom est écrit
dans la variable : Makefile.in => Makefile ; c'est donc le script configure qui
transforme le .in en véritable fichier.
C'est à ce moment là qu'il précise les variables genre CXX, ...
AC_OUTPUT déclenche la génération de tout ce qu'on a prévu jusque là.
\verb+AC_OUTPUT+ déclenche la génération de tout ce qu'on a prévu jusque là.
Pour le moment, il nous manque donc les .in ; c'est automake qui va les générer
@ -60,7 +60,7 @@ Pour le moment, il nous manque donc les .in ; c'est automake qui va les génére
Et puis, on va appeler autoconf pour générer le configure
Pour dire à autoconf qu'on veut utiliser automake, on va ajouter une macro :
AM_INIT_AUTOMAKE()
\verb+AM_INIT_AUTOMAKE()+
On va ajouter deux arguments : foreign pour dire qu'on veut pas les contraintes
d'un projet GNU et 1.11 pour la version minimale d'automake
@ -105,7 +105,7 @@ Le Makefile est composé de régles classiques et d'une multitude de variables.
Bon ba voilà, ça compile donc ça marche !
Il y a plein de trucs sur la ligne de compilation : plein de \texttt{-D} qui
définissent des constantes (du style~: \texttt{HAVE_STRNCMP} qui dit si strncmp
définissent des constantes (du style~: \texttt{HAVE\_STRNCMP} qui dit si strncmp
a un comportement correct, quand c'est mélangé avec autoconf, ça s'utilise
comme une constante de préprocesseur).
Le problème de l'approche c'est qu'elle est limité : on a moins d'une dizaine
@ -162,13 +162,13 @@ Moment historique, faut verser une petite larme :( Le bocal avait l'air
compétent ... Lulz le boulot perdu car sauvé dans le goinfre effacé à 3h42 :p
Tips pour débugger : \texttt{../configure CXXFLAGS="-O0 -g"} à faire dans un
répertoire \texttt{build_debug}, avoir un autre répertoire \texttt{build_fast}
répertoire \texttt{build\_debug}, avoir un autre répertoire \texttt{build\_fast}
avec \texttt{-O3 -DNDEBUG}, \ldots un build par architecture, \ldots
\paragraph{C'est parti~!}
Il trouve pas un fichier : hop on l'ajoute dans le Makefile.am :
\texttt{EXTRA_DIST}.
\texttt{EXTRA\_DIST}.
Maintenant, il ne trouve pas un fichier qui a une adresse relative ! Vu que
distcheck est dans un répertoire \texttt{build/}.

View file

@ -1,7 +1,21 @@
\title{Construction des compilateurs}
\author{Rolland}
\date{ING1}
\author{Roland}
\date{ING1 2014\\
\vspace{6em}
\small{Sources disponibles sur \url{http://ing1.nemunai.re/} ou \href{mailto:ing1@nemunai.re}{ing1@nemunai.re}}}
\maketitle
\tableofcontents
\input{20120130}
\input{20120202}
\input{20120203}
\input{20120221-typage}
\input{20120306}
\input{20120426-instructionselection}