linux - 对于 Makefile 变量的每个目标

我的 makefile 如下所示

apps = app1 app2 app3

all: dir app1 app2 app3 zip 清理

现在我想在 apps 变量列表上做一些循环,

有点像

`loop on apps

endloop`

是否可以在 makefile 中对其进行循环,我需要在 apps 变量列表上进行循环

更新

假设这个变量(apps) 是由我的程序在make 文件中生成的,它为每个项目提供不同的apps 值,有时是 apps= app1 app2 有时是 apps= app1 有时可以是 20 个应用或更多 apps= app1 app2 appN

我如何迭代 apps 变量并做一些事情,例如在每次迭代中打印如下内容:

now im in `app1`
now im in `app2`
etc

尝试以下操作时

.PHONY: foo
all: foo
APPS = app1 app2 app3 app4
foo : $(APPS)
    for $$f in $(APPS); do echo $$f is here; done

出现以下错误:

make: *** 没有规则来制作 targetapp1',foo' 需要。停止。

最佳答案

我看到你有点来回走动,所以让我发表评论,这可能有帮助,也可能没有帮助。

通常您不会在 make 配方中编写循环,因为 make 本身提供“循环”。因此,当您编写如下规则时:

all: app1 app2 app3 app4

make 将尝试构建这些先决条件中的每一个,一次一个。因此,如果您想要一个 makefile 为 apps 变量中的每个条目回显一行,您可以这样做:

all: $(apps)

$(apps):
        @echo $@

这告诉 make 从目标 all 开始,并尝试“构建”它的每个先决条件,这些先决条件是 apps 变量中的值。

然后您为如何构建应用程序定义一个规则,对于每个应用程序,您说规则是 echo $@ 其中 $@ 是 automatic variable扩展到当前正在构建的目标。

在 make 中,语法:

foo bar biz:
        some command

是写作的缩写,与写作相同:

foo:
        some command
bar:
        some command
biz:
        some command

编写 makefile 时的关键是您要考虑如何编写规则以从零个或多个先决条件文件创建一个 文件(目标)。然后让 make 担心如何将所有这些先决条件连接在一起并正确排序。

预计到达时间 如果您想要为保存在 $(apps) 变量中的长列表中的一个特定目标制定特殊规则,您可以这样做:

$(filter-out bar,$(apps)):
        @echo print $@

bar:
        some other command

https://stackoverflow.com/questions/52282549/

相关文章:

react-native - React native如何改变WebView的背景色?

laravel - 如何在 Laravel 迁移中的特定列之后订购多个新列

php - 如何修复我的 "PHP Warning: A non-numeric value enc

arrays - 跨 Bigquery 数组的非重复计数

reactjs - 保存时 React 和 Visual Studio Code 有问题

Angular 6 - 如何在单击其子菜单项时使用 routerLinkActive 将父菜单项设置

html-table - 表中 1.5 的 Colspan

nuget - 无法让 Pipeline 将自定义 NuGet 服务器与 Azure DevOps

apache-kafka - 如何批量处理最大大小的 KStream 或回退到时间窗口?

macos - 如何在 Mac OS 中复制文件的路径?