有人可以解释如何在Makefile中使用if-then语句和for循环吗?我似乎无法通过示例找到任何好的文档。
答案 0 :(得分:60)
条件表格
简单
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”命名的变量设置为该单词并执行文本。
答案 1 :(得分:16)
以下是一个例子:
ifeq ($(strip $(OS)),Linux)
PYTHON = /usr/bin/python
FIND = /usr/bin/find
endif
请注意,这有一个警告,即不同版本的Make语法略有不同,似乎没有一个文档记录得很好。
答案 2 :(得分:8)
你试过GNU make documentation吗?它有一个关于条件的整个部分,带有例子。
答案 3 :(得分:4)
你确实看到很多时间的循环,但通常不需要它们。下面是一个如何在不诉诸shell的情况下执行for循环的示例
LIST_OF_THINGS_TO_DO = do_this do_that
$(LIST_OF_THINGS_TO_DO):
run $@ > $@.out
SUBDIRS = snafu fubar
$(SUBDIRS):
cd $@ && $(MAKE)