Continuant sur notre exemple, il va falloir indiquer à léditeur de liens de chercher les fonctions dans les cinq fichiers objets créés. Il nest pas suffisant de lancer la compilation pour obtenir le programme, car léditeur de liens ne trouvera pas les fonctions ; en effet, il faut absolument comprendre que bien que les fichiers en-tête et source correspondants aient généralement le même nom (avec un suffixe différent), il nen est pas forcément ainsi. De plus, linclusion des fichiers est faite par le préprocesseur, léditeur de liens ne la connaît pas. Enfin, les directives dinclusion ne suffisent pas à indiquer quels sont les fichiers objets effectivement utilisés ; par exemple, en regardant mainfra.cpp
, on pourrait croire quun seul fichier objet est nécessaire ; même en remontant les inclusions successives, on ne trouverait pas iosfract
qui est « caché » dans matrfra.cpp
. Il est pourtant certain que les cinq fichiers objets doivent être utilisés par léditeur de liens.
Sur les système d'exploitations en ligne de commande, on gére un tel ensemble à laide dun fichier de « fabrication » (*.make
) géré par lutilitaire make
. Dans les systèmes graphiques, les compilateurs intégrés comme Turbo C++ fournit un système plus simple nommé projet. Il suffit douvrir une fenêtre de projet nommée par exemple calcfra.prj
et dy inclure les cinq fichiers source *.cpp
.
Lorsque tout y est, il ne reste plus quà lancer la commande adéquate (Make
dans le cas de Turb C++). Voici alors ce que lenvironnement intégré fait :
Le seul travail du programmeur consiste donc à ne pas oublier de fichier dans la fenêtre de projet.
La gestion de programmes ayant de multiples fichiers est considérablement facilitée par ce système. Le gain est évident dès que le programme dépasse quelques centaines de lignes (ce qui arrive très vite).
Par exemple, imaginons que lon modifie un détail dans iosfract.cpp
, puis que lon relance un Make
. Dans ce cas, seul le fichier iosfract.cpp
sera recompilé, et lédition de liens sera refaite.
Si lon modifie un fichier en-tête, les fichiers qui lutilisent seront recompilés. Par exemple une modification de fraction.h
provoquera la recompilation des cinq fichiers source, car tous utilisent directement ou non ce fichier den-tête. Par contre, si lon modifie listefra.h
, seuls listefra.cpp
et matrfra.cpp
seront recompilés.
Précédent | Sommaire | Suivant |