我有一个Makefile
和以下目录结构:
mkdir a
echo 1 > a/b
规则(这会从b
创建一个文件a/b
,并且工作正常):
all: ./b
./b: a/b
echo $^ > $@
当我想用/b
模式替换%
时,它会停止工作(“no rule
”):
all: ./b
.%: a%
echo $^ > $@
为什么?
./%: a/% # works fine
是否存在一些规则,即与文件对应的模式不能用于目录,反之亦然?
答案 0 :(得分:1)
当目标模式不包含斜杠时(通常情况下) 如果没有),文件名中的目录名将从文件名中删除 在与目标前缀和后缀进行比较之前。之后 将文件名与目标模式,目录进行比较 名称,以及结束它们的斜杠,被添加到 从模式规则的先决条件生成的先决条件文件名 模式和文件名。
因此,对于失败案例,“。%”表示匹配以“。”开头的任何目标文件名。