我正在使用一个旧版库,并试图在一些单元测试中努力帮助我进行开发。在这方面,我发现如果我可以在依赖关系上创建特定于目标的过滤器,那么将使它们的makefile适合我的单元测试更容易一些。目前,我会做这样的事情makefile中的目标的自定义依赖过滤器
var_list = input1 input2
out_list = $(var_list:%=%.txt)
all_deps = dep1 dep2 dep3
input1_filter = dep2
input2_filter = dep1 dep3
all: $(out_list)
input1.txt: %.txt: % $(filter-out $(input1_filter),$(all_deps))
@echo "reqs = $?"
@echo "$< > [email protected]"
@echo $< > [email protected]
input2.txt: %.txt: % $(filter-out $(input2_filter),$(all_deps))
@echo "reqs = $?"
@echo "$< > [email protected]"
@echo $< > [email protected]
clean:
@rm $(out_list)
显然,以规则为input1.txt
和input2.txt
几乎是一样的,所以这将是巨大的,如果一个能写
var_list = input1 input2
out_list = $(var_list:%=%.txt)
all_deps = dep1 dep2 dep3
input1_filter = dep2
input2_filter = dep1 dep3
all: $(out_list)
$(out_list): %.txt: % $(filter-out $(%_filter),$(all_deps))
@echo "reqs = $?"
@echo "$< > [email protected]"
@echo $< > [email protected]
clean:
@rm $(out_list)
这意味着对于每一个目标我做,我只需要指定一个相应的_filter
变量,其余的将由makefile来完成。但是我仍然无法获得这个工作。我发现可以在规则的主体中引用这些变量,例如,可以在主体中写入$(filter-out $($<_filter),$(all_deps))
,但不能在依赖列表中写入。
我从来没见过? –
对不起,这只是一个错字,应该是$,我会修复它 –