我有两组文件$(Xs)
和$(Ys)
。每个.x
文件根据其名称依赖于任意数量的.y
文件。对于每个<name>.x
文件,我有许多<name>_*.y
个文件。
我可以为.x
文件编写单独的规则,并使用函数来计算它的依赖关系。
.PHONY: build
Xs = a.x b.x
Ys = a_1.y a_2.y b_1.y b_2.y
build: $(Xs)
a.x: $(filter a%,$(Ys))
@echo $@" with dependencies: "$+
b.x: $(filter b%,$(Ys))
@echo $@" with dependencies: "$+
%.y:
@echo "y : "$@
...或者我可以为所有.x
文件编写模式规则并枚举依赖项
$(Xs) : %.x : %_1.y %_2.y
@echo $@" with dependencies: "$+
但我可以同时做两件事吗?我不知道如何在规则中使用%
匹配字符串,并在$(filter)
中使用它。
$(Xs) : %.x : $(filter ???,$(Ys))
@echo $@" with dependencies: "$+
答案 0 :(得分:1)
您可以使用Secondary Expansion和Canned Recipe执行此操作(需要解决filter
中%的双重用法以及静态模式规则&#39 ;先决条件清单。
.PHONY: build
Xs = a.x b.x
Ys = a_1.y a_2.y b_1.y b_2.y
build: $(Xs)
%.y:
@echo 'y : $@'
define yf
$(filter $(1)_%.y,$(Ys))
endef
.SECONDEXPANSION:
$(Xs) : %.x : $$(call yf,%)
@echo '$@ with dependencies: $+'