Make
Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Introduction

make est un logiciel traditionnel d'UNIX. C'est un « moteur de production » : il sert à appeler des commandes créant des fichiers. À la différence d'un simple script shell, make exécute les commandes seulement si elles sont nécessaires. Le but est d'arriver à un résultat (logiciel compilé ou installé, documentation créée, etc.) sans nécessairement refaire toutes les étapes.

Fonctionnement

Il sert principalement à faciliter la compilation et l'édition de liens puisque dans ce processus le résultat final dépend d'opérations précédentes.

Pour ce faire, make (make est un logiciel traditionnel d'UNIX. C'est un « moteur de production » : il sert à appeler des commandes créant des fichiers. À la différence d'un simple script...) utilise un fichier ( Un fichier est un endroit où sont rangées des fiches. Cela peut-être un meuble, une pièce, un bâtiment, une base de données informatique. Par exemple : fichier des patients...) de configuration appelé makefile qui porte souvent le nom de Makefile. Ce dernier décrit des cibles (qui sont souvent des fichiers, mais pas toujours), de quelles autres cibles elles dépendent, et par quelles actions (des commandes) y parvenir.

Afin de reconstruire une cible spécifiée par l'utilisateur, make va chercher les cibles nécessaires à la reconstruction de cette cible, et ce récursivement. (Ce faisant, il crée de fait un tri topologique de la relation de dépendance sur les cibles.) Certaines variantes de make prévoient la possibilité d'exécution en parallèle des tâches, si possible.

Les règles de dépendance peuvent être explicites (noms de fichiers donnés explicitement) ou implicites (via des motifs de fichiers ; par exemple fichier.o dépend de fichier.c, si celui-ci existe, via une recompilation).

Exemple de Makefile

Voici un exemple de Makefile :

      # Indiquer quel compilateur est à utiliser      CC      ?= gcc            # Spécifier les options du compilateur      CFLAGS  ?= -g       LDFLAGS ?= -L/usr/openwin/lib      LDLIBS  ?= -lX11 -lXext            # Reconnaître les Extension de nom de fichier *.c et *.o comme suffixe      SUFFIXES ?= .c .o       .SUFFIXES: $(SUFFIXES) .            # Nom de l'exécutable      PROG  = life             # Liste de fichiers objets nécessaires pour le programme final      OBJS  = main (La main est l’organe préhensile effecteur situé à l’extrémité de l’avant-bras et relié à ce dernier par le poignet. C'est un organe destiné à saisir et manipuler des...).o window.o Board.o Life.o BoundedBoard.o             all: $(PROG)            # Etape de compilation et d'éditions de liens      # ATTENTION, les lignes suivantes contenant "$(CC)" commencent par un caractère TABULATION et non pas des espaces      $(PROG): $(OBJS)           $(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) -o $(PROG) $(OBJS)            .c.o:           $(CC) $(CFLAGS) -c $*.c      

Dans cet exemple, .c.o est une règle implicite. Par défaut les cibles sont des fichiers, mais lorsque c'est la juxtaposition de deux suffixes, c'est une règle qui dérive n'importe quel fichier se terminant par le deuxième suffixe à partir d'un fichier portant le même nom mais se terminant par le premier suffixe.

Pour parvenir à cette cible, il faut exécuter l'action, la commande (Commande : terme utilisé dans de nombreux domaines, généralement il désigne un ordre ou un souhait impératif.) $(CC) $(CFLAGS) -c $*.c, où $* représente le nom du fichier sans suffixe.

all, en revanche, est une cible qui dépend de $(PROG) (et donc de life, qui est un fichier).

$(PROG) - c'est-à-dire life - est une cible qui dépend de $(OBJ) (et donc de main.o window.o Board.o Life.o et BoundedBoard.o). Pour y parvenir, l'action est d'exécuter la commande $(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) -o $(PROG) $(OBJS)

La syntaxe CC ?= gcc, ou plus généralement  ?= , affecte à seulement si n'en a pas déjà une. Si a déjà été affectée, cette instruction (Une instruction est une forme d'information communiquée qui est à la fois une commande et une explication pour décrire l'action, le comportement, la méthode ou la tâche qui devra commencer, se terminer, être conduit, ou...) n'a aucun effet.

Histoire

make fut à l'origine développé par le docteur Stuart Feldman, en 1977. Ce dernier travaillait alors pour Bell (Bell Aircraft Corporation est un constructeur aéronautique américain fondé le 10 juillet 1935. Après avoir construit des avions de combat durant la Seconde Guerre mondiale, mais aussi le premier avion à...) Labs.

Depuis, plusieurs dérivés ont été développés, les plus connus et utilisés sont ceux de BSD et celui de GNU (GNU est un système d'exploitation composé exclusivement de logiciels libres.), ce dernier étant généralement celui utilisé par défaut avec les systèmes Linux (Au sens strict, Linux est le nom du noyau de système d'exploitation libre, multitâche, multiplate-forme et multi-utilisateur de type UNIX créé par Linus Torvalds, souvent désigné comme le...). Ils diffèrent par certaines fonctionnalités, et par exemple les scripts prévus pour GNU Make peuvent ne pas fonctionner sous BSD Make.

De nos jours (Le jour ou la journée est l'intervalle qui sépare le lever du coucher du Soleil ; c'est la période entre deux nuits, pendant laquelle les rayons du Soleil éclairent le ciel. Son début (par rapport à minuit heure...), les fichiers Makefile sont de plus en plus rarement générés à la main par le développeur (En informatique, un développeur (ou programmeur) est un informaticien qui réalise des logiciels en créant des algorithmes et en les mettant en...) mais construit à partir d'outils automatiques tels qu'autoconf (Autoconf est un outil servant à produire des scripts shell qui configurent automatiquement le code source d'un logiciel pour l'adapter à divers systèmes de type Unix. Les scripts produits par Autoconf...) ou cmake qui facilitent la génération de Makefile complexes et spécifiquement adaptés à l'environnement (L'environnement est tout ce qui nous entoure. C'est l'ensemble des éléments naturels et artificiels au sein duquel se déroule la vie humaine. Avec les enjeux...) dans lequel les actions de production sont censées se réaliser.

Page générée en 0.132 seconde(s) - site hébergé chez Amen
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique