497 votes

Passage d'arguments à "faire tourner"

J'utilise des Makefiles.

J'ai une cible appelée run qui exécute la cible de génération. Simplifié, il ressemble à la suivante:

prog: ....
  ...

run: ./prog
  ./prog

Asseyez-vous. Je sais que c'est ingénieux, mais pas besoin pour une standing ovation.

Maintenant, ma question est-est-il possible de passer des arguments? De sorte que

make run asdf --> ./prog asdf
make run the dog kicked the cat --> ./prog the dog kicked the cat

Merci!

413voto

Jakob Borg Points 10869

Je ne sais pas un moyen de faire ce que vous voulez exactement, mais une solution pourrait être:

run: ./prog
    ./prog ${ARGS}

Alors:

make ARGS="asdf" run

292voto

Idelic Points 4196

Cette question est près de trois ans, mais de toute façon...

Si vous utilisez GNU make, c'est facile à faire. Le seul problème est qu' make va interpréter les non-arguments d'option dans la ligne de commande en tant que cibles. La solution est de les transformer en de ne rien cibles, afin make ne se plaignent:

# If the first argument is "run"...
ifeq (run,$(firstword $(MAKECMDGOALS)))
  # use the rest as arguments for "run"
  RUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
  # ...and turn them into do-nothing targets
  $(eval $(RUN_ARGS):;@:)
endif

prog: # ...
    # ...

.PHONY: run
run : prog
    @echo prog $(RUN_ARGS)

L'exécution de cette donne:

$ make run foo bar baz
prog foo bar baz

85voto

John Knoeller Points 20754

pour la norme de faire vous pouvez passer des arguments par définir des macros comme ceci

make run arg1=asdf

ensuite les utiliser comme ceci

run: ./prog $(arg1)
   etc

Références pour faire Microsoft NMake

9voto

Pas de. La recherche au niveau de la syntaxe à partir de la page de manuel de GNU make

[ -f makefile ] [ options ] ... [ cible ] ...

vous pouvez spécifier plusieurs cibles, par conséquent " non " (au moins pas exactement de la façon que vous avez spécifié).

2voto

Sergey Orshanskiy Points 1180

Voici mon exemple. Notez que je suis en train d'écrire sous Windows 7, à l'aide mingw32-make.exe qui vient avec Dev-Cpp. (J'ai c:\Windows\System32\make.bat, de sorte que la commande est encore appelé à "faire".)

clean:
    $(RM) $(OBJ) $(BIN) 
    @echo off
    if "${backup}" NEQ "" ( mkdir ${backup} 2> nul && copy * ${backup} )

Utilisation pour le nettoyage régulier:

make clean

Utilisation pour le nettoyage et la création d'une sauvegarde dans mydir/:

make clean backup=mydir

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