這個問題在精神上類似於問題2543127。gnu使許多文件複製到一個位置
我有一個gnu makefile文件和一個頭文件列表。每個頭文件可能位於不同的目錄,例如,
HEADERS = $(wildcard *.h) $(wildcard foo/*.h) $(wildcard bar/*.h)
,我想有makefile的所有標題複製到包括目錄
INCDIR = ../include
,當一個虛擬的目標,例如,所有被調用時,它會適當地更新在include目錄中的頭文件,即
.PHONY: ALL
ALL : $(addprefix $(INCDIR)/,$(notdir $(HEADERS)))
很顯然,我可以完成我想要的很容易,如果我知道哪些目錄名單WER即如果我這樣做的話,我可以寫一些規則(東西)像這樣(不完全正確,但你的JIST):
$(addprefix $(INCDIR)/,$(notdir $(filter foo/%.h,$(HEADERS)))) : %.h : foo/%.h
@cp -f $< [email protected]
$(addprefix $(INCDIR)/,$(notdir $(filter bar/%.h,$(HEADERS)))) : %.h : bar/%.h
@cp -f $< [email protected]
$(addprefix $(INCDIR)/,$(notdir $(filter-out bar/%.h,$(filter-out foo/%.h,$(HEADERS))))) : %.h : %.h
@cp -f $< [email protected]
有兩個問題這種方法,(1)它變得繁瑣(2)我將它寫在一個makefile中include,它不知道目錄,它只知道變量INCDIR和HEADERS;它不直接知道foo /,bar /和./以外的目錄(通過$(dir $(HEADERS)))
問題:如何編寫規則以實現所需的效果僅提供INCDIR和HEADERS變量的約束。