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)))