Makefile 使用与';匹配的字符串%';来自模式匹配函数中的模式规则
我有两组文件Makefile 使用与';匹配的字符串%';来自模式匹配函数中的模式规则,makefile,Makefile,我有两组文件$(Xs)和$(Ys)。每个.x文件都依赖于基于其名称的任意数量的.y文件。对于每个.x文件,我都有许多.*.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: $(fil
$(Xs)
和$(Ys)
。每个.x
文件都依赖于基于其名称的任意数量的.y
文件。对于每个.x
文件,我都有许多.*.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
和静态模式规则的prereq列表中重复使用%的问题)
.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: $+'
.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: $+'