Le premier outil accessible est l'outil make qui, déjà, va permettre de décrire de façon très complète les éléments composant une application (en terme de fichiers sources, de librairies, de modules compilés à assembler, etc...). Cet outil sait détecter parmi toutes les actions possibles pour la reconstruction d'un produit logiciel, celles qui seront nécessaires après des modifications partielles des fichiers sources.
Néanmoins, l'outil make peut lui-même devenir très complexe à manipuler. En effet, il faut décrire dans un fichier texte appelé traditionnellement Makefile toutes les règles de dépendance entre les modules, puis toutes les actions à réaliser pour reconstituer chaque élément. La connaissance détaillée de toutes les options de compilation, de link etc.. reste en particulier nécessaires, et rien n'est prévu dans make en ce qui concerne la structuration d'un développement (où sont les sources, les résultats de compilation, les packages produits par d'autres personnes du même projet) ni pour gérer les informations spécifiques à une plateforme donnée.
Un certain nombre d'outils (commerciaux pour la plupart) existent dans quelques environnements pour répondre un peu mieux à ces questions. On peut citer MSVisual dans les environnements Windows, et, dans le monde Unix, de nombreux produits commerciaux fournissent des services comparables.
Nous allons considérer un produit (non commercial) appelé CMT, utilisé dans notre environnement de physique, qui permet d'automatiser sensiblement les processus de configuration. On pourra aussi lire la doc complète de ce produit.
Chaque emplacement de travail (donc où l'on va produire une application par exemple) est appelé un package en terminologie CMT. Chaque package sera décrit par un fichier texte nommé requirements installé dans son répertoire cmt. CMT trouvera dans ce fichier toutes les informations dont il a besoin pour comprendre les éléments de configuration du produit. Nous allons maintenant décrire certaines de ces informations, celles le plus souvent utilisées.
Lorsque l'on a installé pour la première fois un tel fichier requirements dans un répertoire, définissant ainsi un package, il est nécessaire de configurer le package par la commande cmt config à exécuter localement, et une seule fois. Ceci produira un fichier Makefile universel (c.à.d qui restera inchangé quelles que soient les évolutions du package).
Lors des prochaines utilisations de l'outil make par la commande make, CMT sera utilisé de façon transparente pour regénérer automatiquement les paramètres de configuration appropriés de make.
Si l'on veut construire une application, on doit lui donner un nom (par exemple toto). Ce nom sera utilisé entre autres pour nommer le fichier executable (toto.exe).
application toto toto.cpp ../ailleurs/a.cpp -s=../lib x.cpp y.cpp z.cpp
Puis, on a besoin de préciser tous les fichiers sources qui vont être compilés puis assemblés pour fabriquer l'application. Ces fichiers sources peuvent être dans le répertoire propre du package (le répertoire courant) ou non. Dans l'exemple montré ici, nous avons :
La configuration de l'outil make est réalisée grâce à des macros standardisées, chacune correspondant à un compilateur ou à un outil particulier. Pour le C++ (qui nous concerne au premier chef) nous pouvons considérer les macros cppflags et cpplinkflags.
Généralement, il s'agira d'augmenter ces macros, car elles ont déjà reçu une définition par les autres packages utilisés ou par CMT lui-même. Ceci est montré dans l'exemple suivant:
macro_append cppflags " -D__USE_STD_IOSTREAM "
Attention à observer scrupuleusement les majuscules et minuscules, et à bien incorporer un caractère espace avant l'option ajoutée (donc ici avant le -D...).
Une librairie permet de pré-compiler et pré-assembler des modules C++ afin que plusieurs applications puissent les utiliser sans avoir à les reconstruire systématiquement.
On définit une librairie par l'instruction suivante, à placer dans le fichier requirements, en lui donnant un nom et en décrivant ses fichiers sources (comme pour les aplications):
library event a.cpp b.cpp c.cpp
Puis, pour qu'une application (toto par exemple) utilise cette librairie, il est suffisant d'installer une macro dédiée ainsi:
macro totolinkopts " -L. -levent "
ce qui signifie dans cet exemple que l'application toto sera liée avec la librairie nommée event et localisée dans le répertoire courant (option -L.).
De nombreux packages externes, fournissant généralement des librairies spécialisées, peuvent être enregistrés sous CMT et donc être référencés très simplement grâce aux instructions suivantes:
use OPACS v3 use Ci v5r2
Chacune de ces instructions fournira l'accès automatique et transparents aux librairies fournies par ces packages.
$> cd unRepertoireDeTravail $> cmt create unPackage v1 $> cd unPackage/v1/cmt $> vi ../src/... $> vi requirements $> sourse setup.sh $> cmt make
Pour plus d'infos, consulter le site web de cmt