« Make » : différence entre les versions
m Note: Le site de GNU Make n'est pas officiel car cette implémentation n'est pas officielle. |
casse, intro |
||
Ligne 3 : | Ligne 3 : | ||
[[Catégorie:GNU]] |
[[Catégorie:GNU]] |
||
''' |
'''make''' est un [[logiciel]] traditionnel de [[UNIX]]. Il sert a appeller des commandes créant des fichiers. À la différence d'un simple script shell, make n'execute les commandes seulement si celà est necessaire. Le but est d'arriver à un résultat (logiciel compilé ou installé, documentation créée, ...) sans nécéssairement refaire toutes les étapes. |
||
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. |
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é un |
Pour ce faire, Make utilise un fichier de configuration appelé un ''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 comment y parvenir. |
||
== Histoire == |
== Histoire == |
Version du 26 septembre 2005 à 12:07
make est un logiciel traditionnel de UNIX. Il sert a appeller des commandes créant des fichiers. À la différence d'un simple script shell, make n'execute les commandes seulement si celà est necessaire. Le but est d'arriver à un résultat (logiciel compilé ou installé, documentation créée, ...) sans nécéssairement refaire toutes les étapes.
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é un 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 comment y parvenir.
Histoire
Make fut à l'origine développé par le docteur Stuart I. Feldman, en 1977. Ce dernier travaillait pour Bell Labs à cette époque.
Depuis, plusieurs dérivés ont été développés, les plus connus et utilisés sont ceux de BSD et de GNU.
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: $(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) .cpp.o: $(CC) $(CFLAGS) -c $*.c
Dans cet exemple: .ccp.o est une cible. Par défaut les cibles sont des fichiers, et c'est le cas ici. Cette cible ne dépend d'aucune autre puisqu'il n'y a rien d'autre sur la même ligne après :.
Pour parvenir à cette cible, il faut exécuter la commande $(CC) $(CFLAGS) -c $*.c
all est une autre cible qui dépend de ${PROG} (et donc de life, qui est un fichier)
$(PROG) 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, il faut exécuter la commande $(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) -o $(PROG) $(OBJS)
Alternatives
- makepp est 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 recursif peut être facilement évité, pour garantir une construction correcte. En plus Perl est accessible à tous les niveaux. http://makepp.sf.net