我正在使用一箇舊版庫,並試圖在一些單元測試中努力幫助我進行開發。在這方面,我發現如果我可以在依賴關係上創建特定於目標的過濾器,那麼將使它們的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))
,但不能在依賴列表中寫入。
我從來沒見過? –
對不起,這只是一個錯字,應該是$,我會修復它 –