Makefile PHONY 在大文件中的使用
Makefile PHONY usage in large file
我有使用 .Phony 的 Makefile,它工作正常
我的问题是有更简洁的方式来编写它而不是在每个目标之前
all: app1 app2
.PHONY: app1
app1:
echo "from app 1"
.PHONY: app2
app2:
echo "from app 2"
我有很多其他目标(看起来都一样),有没有一种更简洁的方法可以在每个目标之前一遍又一遍地编写它?
您可以在目标中使用all
.PHONY: all
这甚至在 documentation:
中的示例之一中显示
all : prog1 prog2 prog3
.PHONY : all
prog1 : prog1.o utils.o
cc -o prog1 prog1.o utils.o
prog2 : prog2.o
cc -o prog2 prog2.o
prog3 : prog3.o sort.o utils.o
cc -o prog3 prog3.o sort.o utils.o
.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 $@
($@
扩展为规则的目标)。
我有使用 .Phony 的 Makefile,它工作正常 我的问题是有更简洁的方式来编写它而不是在每个目标之前
all: app1 app2
.PHONY: app1
app1:
echo "from app 1"
.PHONY: app2
app2:
echo "from app 2"
我有很多其他目标(看起来都一样),有没有一种更简洁的方法可以在每个目标之前一遍又一遍地编写它?
您可以在目标中使用all
.PHONY: all
这甚至在 documentation:
中的示例之一中显示all : prog1 prog2 prog3
.PHONY : all
prog1 : prog1.o utils.o
cc -o prog1 prog1.o utils.o
prog2 : prog2.o
cc -o prog2 prog2.o
prog3 : prog3.o sort.o utils.o
cc -o prog3 prog3.o sort.o utils.o
.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 $@
($@
扩展为规则的目标)。