Makefile:总是 运行 规则的先决条件?
Makefile: always run prerequisite for a rule?
我想知道是否有办法让 make
总是 运行 一些规则先于另一条规则,如果它是先决条件的话。
例如:
setup:
@echo "Setup"
rule1: setup
@echo "Rule 1"
rule2: setup
@echo "Rule 2"
运行 用上面的 Makefile 编译,输出:
Setup
Rule 1
Rule 2
但我也希望在规则 2 之前设置 运行。 With 会产生这样的输出:
Setup
Rule 1
Setup
Rule 2
在命令列表中调用 make setup
是我唯一的选择吗?
每次调用 make 不可能多次构建目标。
如果你有一个“序言”,你想在每个规则之前 运行 然后你可以把它放入一个变量并将变量添加到每个配方中:
SETUP = @echo "Setup"
rule1:
$(SETUP)
@echo "Rule 1"
rule2:
$(SETUP)
@echo "Rule 2"
一个pattern rule和GNU make secondary expansion可以提供一个近似值。由于您不能多次构建相同的目标,因此我们的想法是拥有与 ruleN
目标一样多的 setup-ruleN
目标,并对所有 setup-ruleN
使用相同的 setup-%
模式规则]:
$ cat Makefile
.PHONY: all
all: rule1 rule2
setup-%:
@echo "Setup"
.SECONDEXPANSION:
rule1: setup-$$@
@echo "Rule 1"
rule2: setup-$$@
@echo "Rule 2"
$ make
Setup
Rule 1
Setup
Rule 2
奖励:$*
自动变量可以用在 setup-%
配方中,如果您想对其进行个性化设置:
$ cat Makefile
.PHONY: all
all: rule1 rule2
setup-%:
@echo "Setup ($*)"
.SECONDEXPANSION:
rule1: setup-$$@
@echo "Rule 1"
rule2: setup-$$@
@echo "Rule 2"
$ make
Setup (rule1)
Rule 1
Setup (rule2)
Rule 2
我想知道是否有办法让 make
总是 运行 一些规则先于另一条规则,如果它是先决条件的话。
例如:
setup:
@echo "Setup"
rule1: setup
@echo "Rule 1"
rule2: setup
@echo "Rule 2"
运行 用上面的 Makefile 编译,输出:
Setup
Rule 1
Rule 2
但我也希望在规则 2 之前设置 运行。 With 会产生这样的输出:
Setup
Rule 1
Setup
Rule 2
在命令列表中调用 make setup
是我唯一的选择吗?
每次调用 make 不可能多次构建目标。
如果你有一个“序言”,你想在每个规则之前 运行 然后你可以把它放入一个变量并将变量添加到每个配方中:
SETUP = @echo "Setup"
rule1:
$(SETUP)
@echo "Rule 1"
rule2:
$(SETUP)
@echo "Rule 2"
一个pattern rule和GNU make secondary expansion可以提供一个近似值。由于您不能多次构建相同的目标,因此我们的想法是拥有与 ruleN
目标一样多的 setup-ruleN
目标,并对所有 setup-ruleN
使用相同的 setup-%
模式规则]:
$ cat Makefile
.PHONY: all
all: rule1 rule2
setup-%:
@echo "Setup"
.SECONDEXPANSION:
rule1: setup-$$@
@echo "Rule 1"
rule2: setup-$$@
@echo "Rule 2"
$ make
Setup
Rule 1
Setup
Rule 2
奖励:$*
自动变量可以用在 setup-%
配方中,如果您想对其进行个性化设置:
$ cat Makefile
.PHONY: all
all: rule1 rule2
setup-%:
@echo "Setup ($*)"
.SECONDEXPANSION:
rule1: setup-$$@
@echo "Rule 1"
rule2: setup-$$@
@echo "Rule 2"
$ make
Setup (rule1)
Rule 1
Setup (rule2)
Rule 2