Makefile If-Then Else和循环

有人可以解释如何使用if-then语句和Makefiles中的循环? 我似乎无法find任何好例子的文档。

条件表格

简单

conditional-directive text-if-true endif 

适度复杂

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

更复杂

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

有条件的指令

如果相等语法

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

如果不等于语法

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

如果定义的语法

 ifdef variable-name 

如果没有定义语法

 ifndef variable-name 

foreach函数

foreach函数语法

 $(foreach var, list, text) 

foreach语义
对于“list”中的每个以空格分隔的词,由“var”命名的variables被设置为该词并且文本被执行。

这是一个例子,如果:

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

请注意,这带有一个警告,即Make的不同版本语法略有不同,其中没有一个似乎logging得很好。

你有没有尝试过GNU make文档 ? 它有一个关于条件的例子。

你确实看到了很多的循环,但通常不需要。 下面是一个例子,说明如何执行一个for循环而不使用shell

 LIST_OF_THINGS_TO_DO = do_this do_that $(LIST_OF_THINGS_TO_DO): run $@ > $@.out SUBDIRS = snafu fubar $(SUBDIRS): cd $@ && $(MAKE)