Makefile If-Then Else i pętle

Czy ktoś może wyjaśnić jak używać poleceń if-then I pętli for w plikach Makefiles? Nie mogę znaleźć dobrej dokumentacji z przykładami.

 50
Author: Jeff Atwood, 2008-10-08

4 answers

Formularze Warunkowe

Proste

conditional-directive
text-if-true
endif

Umiarkowanie Złożone

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

Bardziej Złożone

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

Dyrektywy Warunkowe

If Equal Syntax

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

Jeśli Nie Równa Składnia

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

Jeśli Zdefiniowana Składnia

ifdef variable-name

Jeśli Nie Zdefiniowano Składni

ifndef variable-name  

Funkcja Foreach

Składnia Funkcji Foreach

$(foreach var, list, text)  

Foreach Semantyka
Dla każdej białej spacji oddzielone słowo w "list", zmienna nazwana przez " var " jest ustawiona na to słowo i tekst jest wykonywany.

 55
Author: John Mulder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-07 09:44:44

Oto przykład, jeśli:

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

Zauważ, że jest to słowo ostrzeżenia, że różne wersje Make mają nieco inną składnię, z których żadna nie wydaje się być dobrze udokumentowana.

 13
Author: Mark Roddy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-07 23:02:19

Czy próbowałeś GNU make documentation ? Zawiera całą sekcję o uwarunkowaniach z przykładami.

 7
Author: Jeremy Ruten,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-07 22:59:57

Często widzisz pętle, ale zazwyczaj nie są one potrzebne. Oto przykład jak można wykonać pętlę for bez uciekania się do powłoki

LIST_OF_THINGS_TO_DO = do_this do_that 
$(LIST_OF_THINGS_TO_DO): 
       run $@ > [email protected]

SUBDIRS = snafu fubar
$(SUBDIRS):
     cd $@ && $(MAKE)
 3
Author: Kramer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-05 05:36:30