可以为未知的先决条件制作构建目标吗?

时间:2014-07-30 13:22:05

标签: makefile

我需要处理具有特定扩展名的所有文件,并将结果打包成一个存档。有没有办法make这样做?

例如,假设我需要获取所有 .w 文件并为每个文件生成 .n 文件,其中任何元音都转为句点,然后{{1}结果。如果我按如下方式创建tar

Makefile

novowels.tar: %.n tar cf $@ $^ %.n: %.w sed -e "s/[aeiou]/./g" > $@ < $< (毫不奇怪)如果目录中没有 .n 文件,则返回以下内容:

make

我可以致电make: *** No rule to make target '%.n', needed by 'novowels.tar'. Stop. ,它会从 the.w 创建文件(假设存在),如果我再调用make the.n它将被包含在内在档案中。

问题是:如何(最好)让make意识到有一大堆 .w 文件需要转换为 .n 文件首先是什么?

1 个答案:

答案 0 :(得分:3)

以此为例:

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

被盗:     Can I compile all .cpp files in src/ to .o's in obj/, then link to binary in ./?