如何通过文件模式将Makefile中的变量设置为文件名(仅当模式有一个匹配项时)

如何通过文件模式将Makefile中的变量设置为文件名(仅当模式有一个匹配项时),makefile,gnu-make,filepattern,Makefile,Gnu Make,Filepattern,我有一个makefile供gnumake从标记文本文件构建文档。makefile有一个变量INPUT,我想设置为标记文件的文件名。所有标记文件都遵循*.md模式 但是,当只有一个文件与模式匹配时,我希望仅将INPUT设置为文件名,如果有多个标记文件,make应退出并出错 我尝试了一个显而易见的选择 INPUT ?= *.md 但这会将输入设置为**所有*匹配项的列表。因此,对于只包含file_a.md的目录,它可以正常工作,但在包含 file_a.md file_b.md INPUT之后包含

我有一个makefile供gnumake从标记文本文件构建文档。makefile有一个变量
INPUT
,我想设置为标记文件的文件名。所有标记文件都遵循*.md模式

但是,当只有一个文件与模式匹配时,我希望仅将
INPUT
设置为文件名,如果有多个标记文件,make应退出并出错

我尝试了一个显而易见的选择

INPUT ?= *.md
但这会将输入设置为**所有*匹配项的列表。因此,对于只包含
file_a.md
的目录,它可以正常工作,但在包含

file_a.md
file_b.md
INPUT
之后包含“
file\u a.md file\u b.md
”,这打乱了我的规则,我希望输入包含一个文件或退出


使用makefile语法指定
输入
的任何方法?

要执行所需操作,需要使用
$(通配符)
函数强制立即执行全局绑定(否则,make将等待变量在适当位置使用后再展开全局)


如果有多个文件,您希望为
INPUT
分配什么?没有什么?是否希望make抛出错误?是的,如果有多个匹配项,我希望
make
以错误退出。使用
通配符
功能是个好主意。这就是我错过的。谢谢!
INPUT ?= $(wildcard *.md)

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