web-dev-qa-db-fra.com

Comment "fait-il" que l'application connaisse 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 j'ai bien compris, make prend les noms des cibles de construction comme arguments. Donc, install est une cible qui copie certains fichiers, puis clean est une cible qui supprime les fichiers temporaires.

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

156
grigoryvp

Par défaut, il commence par traiter la première cible qui ne commence pas par un . _ aka objectif par défaut ; pour ce faire, il devra peut-être traiter d'autres cibles, en particulier celles sur lesquelles repose la première cible.

Le GNU Make Manual couvre tout cela et constitue une lecture étonnamment simple et informative.

207
anon

Pour éviter aux autres de quelques secondes et éviter de lire le manuel, voici la réponse courte. Ajoutez ceci en haut de votre fichier make:

.DEFAULT_GOAL := mytarget

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

Si vous avez une version plus ancienne de make (<= 3.80), cela ne fonctionnera pas. Si tel est le cas, alors vous pouvez faire ce que mentionne anon, 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

150
Samuel

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ésélectionner cette variable au milieu du Makefile, faisant de la cible suivante du fichier la cible par défaut.

Ref: Manuel de Gnu Make - Variables spéciales

32