247 votes

Comment l'application "make" connaît-elle la cible par défaut à construire si aucune cible n'est spécifiée ?

La plupart des applications Linux sont compilées avec :

make
make install clean

Si je comprends bien, le make prend les noms des cibles de construction comme arguments. Ainsi, par exemple install est généralement une cible qui copie certains fichiers vers des emplacements standards, et clean est une cible qui supprime les fichiers temporaires.

Mais quelle sera la cible make construire si aucun argument n'est spécifié (par exemple, la première commande dans mon exemple) ?

289voto

Par défaut, il commence par traiter la première cible qui ne commence pas par un mot clé . alias l'objectif par défaut Pour ce faire, il peut être amené à traiter d'autres cibles, notamment celles dont la première cible dépend.

El Manuel de GNU Make couvre toutes ces questions, et sa lecture est étonnamment facile et instructive.

0 votes

Pas la cible "tous" comme indiqué dans la réponse précédente ? :(

89 votes

Appel de la première cible all est juste une convention.

0 votes

Et si je lance "make install", il ne construira que la cible "install". En sautant la première cible, car "install" ne dépend pas d'elle, correct ?

258voto

Samuel Points 303

Pour faire gagner quelques secondes aux autres, et pour leur éviter de devoir lire le manuel, voici la réponse courte. Ajoutez ceci au début de votre fichier make :

.DEFAULT_GOAL := mytarget

mytarget sera maintenant la cible qui sera exécutée si "make" est exécuté et qu'aucune cible n'est spécifiée.

Si vous avez une ancienne version de make (<= 3.80), cela ne fonctionnera pas. Si c'est le cas, alors vous pouvez faire ce que anon mentionne, ajoutez simplement ceci en haut de votre fichier make :

.PHONY: default
default: mytarget ;

Références : https://www.gnu.org/software/make/manual/html_node/How-Make-Works.html

1 votes

@nathan Cela fait de mytarget la cible par défaut si quelqu'un exécute "make" sans aucun paramètre.

1 votes

Notez que .DEFAULT_GOAL ne semble pas être supporté par GNU make v3.80, et je suppose que les versions précédentes le sont aussi (v3.81 le supporte cependant). Si vous utilisez une version plus ancienne de make, vous devrez vous assurer que votre cible par défaut est la première/la plus haute cible dans votre fichier make.

1 votes

Est default: un nom de cible spécial, ou cela fonctionne parce que c'est la première cible du fichier ?

42voto

GNU Make vous permet également de spécifier la cible make par défaut en utilisant une variable spéciale appelée .DEFAULT_GOAL . Vous pouvez même désactiver cette variable au milieu du Makefile, ce qui fait que la cible suivante dans le fichier devient la cible par défaut.

Réf : Le manuel Gnu Make - Variables spéciales

1voto

Mateusz Piotrowski Points 3815

L'équivalent pour bmake de l'utilitaire GNU Make .DEFAULT_GOAL est .MAIN :

$ cat Makefile
.MAIN: foo

all:
    @echo all

foo:
    @echo foo
$ bmake
foo

Voir le Page de manuel de bmake(1) .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X