2

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

INPUT但是,当只有一个与模式匹配的文件时,我只想设置文件名,如果有多个 markdown 文件,make 应该退出并出现错误。

我尝试了显而易见的选择

INPUT ?= *.md

但这当然会将 INPUT 设置为 **all* 匹配项的列表。因此,它适用于仅包含 的目录file_a.md,但位于包含的目录中

file_a.md
file_b.md

INPUT之后包含“ file_a.md file_b.md”,这弄乱了我期望 INPUT 包含一个文件或退出的规则。

任何方式来分配INPUT我想要的makefile语法?

4

1 回答 1

3

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

INPUT ?= $(wildcard *.md)

ifneq (1,$(words $(INPUT)))
    $(error Too many or two few input files found.)
endif
于 2015-03-30T23:22:35.840 回答