Makefile:混合文件/目录模式

时间:2016-03-07 21:13:52

标签: makefile

我有一个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

是否存在一些规则,即与文件对应的模式不能用于目录,反之亦然?

1 个答案:

答案 0 :(得分:1)

请检查How Patterns Match

  

当目标模式不包含斜杠时(通常情况下)   如果没有),文件名中的目录名将从文件名中删除   在与目标前缀和后缀进行比较之前。之后   将文件名与目标模式,目录进行比较   名称,以及结束它们的斜杠,被添加到   从模式规则的先决条件生成的先决条件文件名   模式和文件名。

因此,对于失败案例,“。%”表示匹配以“。”开头的任何目标文件名。