Le processus de construction de la cible macible est lancé par
make macibleLe programme
make
recherche un fichier nommé
makefile
ou Makefile
dans le répertoire
courant. Ce fichier contient les informations qui lui permettent de travailler.
Le makefile est composé de plusieurs parties :
NOM=valeur(noter que la déclaration de macro commence en début de ligne)
Une macro permet de rendre le makefile plus souple. Par exemple, si on déclare :
CC=gccet que partout dans le makefile on utilise
$(CC)
au lieu de gcc
, il suffira de changer la
valeur de la macro pour changer le compilateur utilisé.
cible : dep1 dep2 ... commande1 commande2 ...La première ligne précise d'une part la cible sur laquelle porte la règle, et indique d'autre part que pour que cette cible soit construite, il faut que dep1, dep2, dep3... soient à jour. Dep1, dep2, dep3... sont, soit des cibles, soit des fichiers existant.
On dit qu'un fichier est à jour s'il existe et qu'il est plus récent que les fichiers ou cibles dont il dépend.
Quand make
tente de construire une cible
a, qui dépend de cibles d'une cible b qui
n'est pas à jour, il met b à jour en le prenant à
son tour pour cible
Les commandes, quant à elles, sont optionnelles. Chaque
ligne de commande commence par une tabulation.
Pour construire une cible, une fois que make
a
mis à jour ses dépendences, il cherche une règle qui
concerne la cible et qui contienne des commandes ; puis il exécute ces commandes.
On suppose qu'on a une application dont le source est composé
de trois fichiers, Article.h, Article.cpp,
et
programme.cpp
. Les fichiers
Article.cpp
et programme.cpp
incluent
Article.h
fichiers utilisés
# déclarations des macros : # la compilateur : CCC=c++ # les options du compilateur : # (on compilera pour le débugger). CCFLAG=-g # Règles : programme: programme.o Article.o $(CCC) -o programme programme.o Article.o programme.o: programme.cpp Article.h $(CCC) -c programme.cpp Article.o: Article.cpp Article.h $(CCC) -c Article.cpp # Une "pseudo" cible, qui ne crée pas de fichier, pour nettoyer le répertoire. # évite de taper "rm" à la main. Le "-" devant rm signifie que si la commande échoue, # (par exemple s'il n'y a rien à effacer), make va continuer comme si de rien n'était. clean: -rm *.o programme
main
.
getPrixTTC()
à votre classe. Décommentez la ligne
//cout << "le prix ttc de " << a.getDesignation() << " est " << a.getPrixTTC() << endl;
class Facture { private: int nombreArticles; Article * articles[10]; public: Facture(); ~Facture(); void add(Article *a); int getNombreArticles(); Article * getArticle(int i); void setArticle(int i, Article * a); double getTotalHT(); double getTotalTTC(); };Vous écrirez un programme principal dans lequel vous :