我看到你来来回回了一点,所以让我发表一条可能有帮助也可能没有帮助的评论。
一般来说,你不会在 make 配方中编写循环,因为 make 本身提供了“循环”。因此,当您编写如下规则时:
all: app1 app2 app3 app4
make 将尝试一次一个地构建这些先决条件中的每一个。因此,如果您想要一个 makefile 为每个条目回显一行apps
变量你会这样做:
all: $(apps)
$(apps):
@echo $@
这告诉 make 从一个目标开始all
并尝试“构建”它的每个先决条件,这些先决条件是apps
多变的。
然后,您定义如何构建应用程序的规则,并且对于每个应用程序,您所说的规则是echo $@
where $@
is an 自动变量 https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html扩大到当前建设的目标。
在 make 中,语法:
foo bar biz:
some command
是以下形式的简写形式,并且与以下形式相同:
foo:
some command
bar:
some command
biz:
some command
编写 makefile 时最重要的是你要考虑如何编写规则来创建one文件(目标)来自零个或多个先决条件文件。然后你就可以考虑如何将所有这些先决条件连接在一起并正确排序。
ETA如果您想对保存在长列表中的一个特定目标使用特殊规则$(apps)
变量,你可以这样做:
$(filter-out bar,$(apps)):
@echo print $@
bar:
some other command