我有一个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
的任何方法?
答案 0 :(得分:3)
要执行您想要的操作,您需要使用$(wildcard)
函数强制立即执行globbing(否则make将等到变量在扩展glob之前在适当的位置使用)。
INPUT ?= $(wildcard *.md)
ifneq (1,$(words $(INPUT)))
$(error Too many or two few input files found.)
endif