如何通过文件模式将Makefile中的变量设置为文件名(仅当模式有一个匹配项时)
我有一个makefile供gnumake从标记文本文件构建文档。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之后包含
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