[英]makefile match-anything as a prerequisite
我有一個帶有四個目標的makefile。 這些目標中的兩個可以被復制,因此可能有許多目標需要作為先決條件運行(它們是雙冒號目標 )。 其中兩個目標是任何比賽規則 。 不幸的是,它根本無法像我期望的那樣工作。 我從這個開始:
.PHONY:
build_%: pre_build post_build _internal_%
@echo "4. $@: $^"
.PHONY: pre_build
pre_build::
@echo "1. $@: $^"
.PHONY: _internal_%
_internal_%:
@echo "2. $@: $^"
.PHONY: post_build
post_build::
@echo "3. $@: $^"
那給了我這個輸出:
make build_foo
1. pre_build:
3. post_build:
2. _internal_foo:
4. build_foo: pre_build _internal_foo post_build
如果我明確要求先決條件,例如:
.PHONY:
build_%: pre_build post_build _internal_%
@echo "4. $@: $^"
.PHONY: pre_build
pre_build::
@echo "1. $@: $^"
.PHONY: _internal_%
_internal_%: pre_build
@echo "2. $@: $^"
.PHONY: post_build
post_build:: _internal_%
@echo "3. $@: $^"
相反,我得到這個:
make build_foo
1. pre_build:
make: *** No rule to make target `pre_build'. Stop.
我需要做些什么才能使像這樣的依賴項工作? 我正在使用GNU Make 3.81。
這似乎是GNU Make 3.81中的真實錯誤。
我建議這種解決方法:
define prebuild
@echo "1. pre_build: $^"
endef
define postbuild
@echo "3. post_build: $^"
endef
.PHONY:
build_%: _internal_%
@echo "4. $@: $^"
.PHONY: _internal_%
_internal_%:
$(prebuild)
@echo "2. $@: $^"
$(postbuild)
# pre_build and post_build are not used here, but may still be used elsewhere
.PHONY: pre_build
pre_build::
$(prebuild)
.PHONY: post_build
post_build::
$(postbuild)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.