我有使用.Phony的Makefile,可以正常工作 我的问题是有一种更干净的方法来编写它,而不是在每个目标之前写出
all: app1 app2
.PHONY: app1
app1:
echo "from app 1"
.PHONY: app2
app2:
echo "from app 2"
我还有许多其他目标(看起来相同),是否有一种更干净的方法来代替它在每个目标之间反复编写?
答案 0 :(得分:0)
答案 1 :(得分:0)
.PHONY
可以具有任意多个先决条件:
.PHONY: all app1 app2
您可以将其放置在Makefile中的任何位置,不仅只是在伪造目标的规则之前:
.PHONY: all app1 app2
all: app1 app2
app1:
echo "from app 1"
app2:
echo "from app 2"
请注意,如果您拥有“ 许多看起来相同的其他目标”,make可能具有一些不错的功能,可以用来分解相似性:
APPS := app1 app2
.PHONY: all $(APPS)
all: $(APPS)
$(APPS): app%:
echo "from app $*"
(在食谱中,{$*
被扩展为app%
模式的主干)。
Make非常聪明,您甚至可以让它自动神奇地检测潜在目标,而不必显式列出它们(APPS := app1 app2...
)。但是在这里,我们需要更多地了解您的真实项目组织。例如,假设每个appX
都有一个对应的appX.todo
文件,并且构建命令类似于buildapp appX.todo appX
。然后,以下Makefile将自动执行所有操作:
TODO := $(wildcard *.todo)
APPS := $(patsubst %.todo,%,$(TODO))
.PHONY: all $(APPS)
all: $(APPS)
$(APPS):
buildapp $@.todo $@
({$@
被扩展为规则的目标)。