如何通过文件模式将 Makefile 中的变量设置为文件名,前提是该模式只有一个匹配项
How to set a variable in a Makefile to a filename via a file pattern, only if the pattern has ONE match
我有一个 GNU make 的 makefile,可以从 markdown 文本文件构建文档。 makefile 有一个变量 INPUT
我想设置为 markdown 文件的文件名。所有降价文件都遵循 *.md.
模式
但是我只想在只有一个文件匹配模式时设置INPUT
到文件名,如果有多个markdown文件,make应该退出出现错误。
我尝试了显而易见的选择
INPUT ?= *.md
但这当然会将 INPUT 设置为**所有*匹配项的列表。因此,对于仅包含 file_a.md
的目录,但在包含
的目录中,它可以正常工作
file_a.md
file_b.md
INPUT
之后包含“file_a.md file_b.md
”,这打乱了我期望 INPUT 包含 一个 文件或退出的规则。
有什么方法可以使用 makefile 语法分配 INPUT
吗?
要执行您想要的操作,您需要使用 $(wildcard)
函数强制立即完成 globbing(否则 make 将等到变量在适当的位置使用后再展开 glob)。
INPUT ?= $(wildcard *.md)
ifneq (1,$(words $(INPUT)))
$(error Too many or two few input files found.)
endif
我有一个 GNU make 的 makefile,可以从 markdown 文本文件构建文档。 makefile 有一个变量 INPUT
我想设置为 markdown 文件的文件名。所有降价文件都遵循 *.md.
但是我只想在只有一个文件匹配模式时设置INPUT
到文件名,如果有多个markdown文件,make应该退出出现错误。
我尝试了显而易见的选择
INPUT ?= *.md
但这当然会将 INPUT 设置为**所有*匹配项的列表。因此,对于仅包含 file_a.md
的目录,但在包含
file_a.md
file_b.md
INPUT
之后包含“file_a.md file_b.md
”,这打乱了我期望 INPUT 包含 一个 文件或退出的规则。
有什么方法可以使用 makefile 语法分配 INPUT
吗?
要执行您想要的操作,您需要使用 $(wildcard)
函数强制立即完成 globbing(否则 make 将等到变量在适当的位置使用后再展开 glob)。
INPUT ?= $(wildcard *.md)
ifneq (1,$(words $(INPUT)))
$(error Too many or two few input files found.)
endif