仅当模式具有ONE匹配时,如何通过文件模式将Makefile中的变量设置为文件名

时间:2015-03-30 22:55:05

标签: makefile gnu-make filepattern

我有一个GNU make的makefile来从markdown文本文件构建文档。 makefile有一个变量INPUT我想设置为markdown文件的文件名。所有降价文件都遵循模式* .md。

但是,当只有一个文件与模式匹配时,我只想将INPUT设置为文件名,如果有多个降价文件,则make应退出并显示错误。< / p>

我尝试了明显的选择

INPUT ?= *.md

但是这会将INPUT设置为**所有*匹配的列表。因此它适用于仅包含file_a.md的目录,但在包含

的目录中
file_a.md
file_b.md

INPUT之后包含“file_a.md file_b.md”,这会混淆我的规则,希望INPUT包含一个文件或退出。

如果我想用makefile语法分配INPUT的任何方法?

1 个答案:

答案 0 :(得分:3)

要执行您想要的操作,您需要使用$(wildcard)函数强制立即执行globbing(否则make将等到变量在扩展glob之前在适当的位置使用)。

INPUT ?= $(wildcard *.md)

ifneq (1,$(words $(INPUT)))
    $(error Too many or two few input files found.)
endif