Makefile 可以为未知的先决条件制定构建目标吗?
我需要处理具有特定扩展名的所有文件,并将结果打包到单个存档中。有没有办法让Makefile 可以为未知的先决条件制定构建目标吗?,makefile,Makefile,我需要处理具有特定扩展名的所有文件,并将结果打包到单个存档中。有没有办法让制作这样做 例如,假设我需要获取所有的.w文件,并为每个文件生成一个.n文件,其中任何元音都转换为句点,然后tar向上搜索结果。如果我创建一个Makefile,如下所示: novowels.tar: %.n tar cf $@ $^ %.n: %.w sed -e "s/[aeiou]/./g" > $@ < $< 我可以调用make.n,它将从.w创建文件(假设存在),如果我随后调用
制作这样做
例如,假设我需要获取所有的.w文件,并为每个文件生成一个.n文件,其中任何元音都转换为句点,然后tar
向上搜索结果。如果我创建一个Makefile
,如下所示:
novowels.tar: %.n
tar cf $@ $^
%.n: %.w
sed -e "s/[aeiou]/./g" > $@ < $<
我可以调用make.n
,它将从.w创建文件(假设存在),如果我随后调用make
,它将包含在存档中
问题是:如何(最好)让让意识到有一大堆.w文件首先需要转换为.n文件?以此为例:
ALLFILES_IN := $(wildcard *.w)
ALLFILES_OUT := $(ALLFILES_IN:.w=.n)
$(info In : $(ALLFILES_IN))
$(info Out: $(ALLFILES_OUT))
%.n: %.w
cat $< > $@
all.tar: $(ALLFILES_OUT)
@echo "Tar:" $^
这是从以下地点偷来的:
太棒了!我知道会涉及到通配符,但没有想到会列出输入文件,然后更改扩展名以获取输出文件,并将其设置为pre-req。
ALLFILES_IN := $(wildcard *.w)
ALLFILES_OUT := $(ALLFILES_IN:.w=.n)
$(info In : $(ALLFILES_IN))
$(info Out: $(ALLFILES_OUT))
%.n: %.w
cat $< > $@
all.tar: $(ALLFILES_OUT)
@echo "Tar:" $^
CPP_FILES := $(wildcard src/*.cpp)
OBJ_FILES := $(addprefix obj/,$(notdir $(CPP_FILES:.cpp=.o)))