56 votes

Makefile If-Then Else et boucles

Quelqu'un peut-il m'expliquer comment utiliser les instructions if-then et les boucles for dans Makefiles ? Je n'arrive pas à trouver une bonne documentation avec des exemples.

61voto

John Mulder Points 3716

Formes conditionnelles

Simple

conditional-directive
text-if-true
endif

Modérément complexe

conditional-directive
text-if-true
else
text-if-false
endif

Plus complexe

conditional-directive
text-if-one-is-true
else
conditional-directive
text-if-true
else
text-if-false
endif
endif

Directives conditionnelles

Syntaxe If Equal

ifeq (arg1, arg2)
ifeq 'arg1' 'arg2'
ifeq "arg1" "arg2"
ifeq "arg1" 'arg2'
ifeq 'arg1' "arg2"

Syntaxe If Not Equal

ifneq (arg1, arg2)
ifneq 'arg1' 'arg2'
ifneq "arg1" "arg2"
ifneq "arg1" 'arg2'
ifneq 'arg1' "arg2"

Syntaxe si définie

ifdef variable-name

Si non défini Syntaxe

ifndef variable-name  

Fonction foreach

Syntaxe de la fonction foreach

$(foreach var, list, text)  

foreach Sémantique
Pour chaque mot séparé par un espace dans "list", la variable nommée par "var" est définie par ce mot et le texte est exécuté.

16voto

Mark Roddy Points 7568

Voici un exemple si :

ifeq ($(strip $(OS)),Linux)
        PYTHON = /usr/bin/python
        FIND = /usr/bin/find
endif

Notez que cela s'accompagne d'un avertissement : les différentes versions de Make ont une syntaxe légèrement différente, dont aucune ne semble être très bien documentée.

8voto

Jeremy Ruten Points 59989

Avez-vous essayé le Documentation de GNU make ? Il comporte une section entière sur les conditionnels avec des exemples.

4voto

Kramer Points 74

On voit souvent des boucles for, mais elles ne sont généralement pas nécessaires. Voici un exemple de la façon dont on peut exécuter une boucle for sans recourir au shell

LIST_OF_THINGS_TO_DO = do_this do_that 
$(LIST_OF_THINGS_TO_DO): 
       run $@ > $@.out

SUBDIRS = snafu fubar
$(SUBDIRS):
     cd $@ && $(MAKE)

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