Make
Gelose | Tous les portails | Portail Medecine | Portail Biologie | Portail Biochimie | Portail Microbiologie | Portail Ecologie | Portail Botanique | Biologie cellulaire | Portail Zoologie | Science de la terre | Portail Eau |
Inscrivez votre site en haut de cette page Soumission direct par Allopass, obtenez 1 lien de qualite en haut de cette page Make ainsi que sur la page des nouveaux sites inscrits pour seulement 20 euros!
|
En raison de limitations techniques, la typographie souhaitable du titre, « make », n'a pu être restituée correctement ci-dessus.
make est un logiciel traditionnel d'UNIX. Il sert à appeler des commandes créant des fichiers. À la différence d'un simple script shell, make exécute les commandes seulement si c'est nécessaire. Le but est d'arriver à un résultat (logiciel compilé ou installé, documentation créée, etc.) sans nécessairement refaire toutes les étapes.
Sommaire |
[] 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 utilise un fichier 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).
[] Histoire
Make fut à l'origine développé par le docteur Stuart I. Feldman, en 1977. Ce dernier travaillait alors pour Bell 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, ce dernier étant généralement celui utilisé par défaut avec les systèmes Linux. Ils diffèrent par certaines fonctionnalités, et par exemple les scripts prévus pour GNU Make peuvent ne pas fonctionner sous BSD Make.
[] Exemple de makefile
Voici un exemple de makefile :
# Specify compiler
CC ?= gcc
# Specify compiler options
CFLAGS ?= -g
LDFLAGS ?= -L/usr/openwin/lib
LDLIBS ?= -lX11 -lXext
# Needed to recognize .c as a file suffix
SUFFIXES ?= .c .o
.SUFFIXES: $(SUFFIXES) .
# Executable name
PROG = life
# List of object file needed for the final program
OBJS = main.o window.o Board.o Life.o BoundedBoard.o
all: $(PROG)
# Program compilation and linking steps
$(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 2ème suffixe à partir d'un fichier portant le même nom mais se terminant par le 1er suffixe.
Pour parvenir à cette cible, il faut exécuter l'action, la commande $(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 <variable> ?= <valeur>, affecte <valeur> à <variable> seulement si <variable> n'en n'a pas déjà une. Si <variable> a déjà été affectée, cette instruction n'a aucun effet.
[] Alternatives
Il existe plusieurs alternatives à make :
- makepp : un dérivé de (GNU) make, mais offre en plus un analyseur extensible de commandes et fichiers inclus afin de reconnaître automatiquement les dépendances. Les options de commandes changés et autres influences sont reconnus. Le grand problème de make récursif peut être facilement évité, pour garantir une construction correcte. En plus Perl est accessible à tous les niveaux [1]
- ant : plutôt lié au monde Java.
- SCons : complètement différent de make, qui inclus certaines des fonctions d'outil de compilation comme autoconf. On peut utiliser Python pour étendre l'outil.
- Speedy Make utilise XML pour les makefiles, très simple à écrire, offre plus d'automatismes que make.
[] Liens externes
- (en) Site de l'implémentation GNU
- (fr) Introduction à Make (exemples en Java)
- (fr) Compilation séparée et Make (exemples en C)
| Portail des logiciels libres – Accédez aux articles de Wikipédia concernant les logiciels libres. |