166 votes

Comment passer un argument à Makefile à partir de la ligne de commande?

Comment passer un argument à Makefile à partir de la ligne de commande?

Je comprends que je peux faire

 $ make action VAR="value"
$ value
 

avec Makefile

 VAR = "default"
action:
    @echo $(VAR)
 

Comment puis-je obtenir le comportement suivant?

 $ make action value
value
 

?

Que diriez-vous

 $make action value1 value2
value1 value2
 

270voto

Beta Points 37745

Vous ne devriez pas faire cela, vous êtes briser le modèle de base de comment se Faire des travaux. Mais ici, il est:

action:
        @echo action $(filter-out $@,$(MAKECMDGOALS))

%:      # thanks to chakrit
    @:    # thanks to William Pursell

EDIT:
Pour expliquer la première commande,

$(MAKECMDGOALS) est la liste de "cibles" énoncées dans la ligne de commande, par exemple "action valeur1 valeur2".

$@ est une variable automatique pour le nom de la cible de la règle, dans ce cas, "l'action".

filter-out est une fonction qui supprime certains éléments d'une liste. Donc, $(filter-out bar, foo bar baz) retours foo baz (il peut être plus subtil, mais nous n'avons pas besoin de subtilité ici).

Mettre ces ensemble et $(filter-out $@,$(MAKECMDGOALS)) retourne la liste de cibles spécifiées sur la ligne de commande autre que "l'action", qui peut être "valeur1 valeur2".

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