12

make の興味深い動作を観察していますが、gmake のバグ以外に合理的な説明があるのではないかと考えています。

makefile に次の内容があるとします。

%-animal:
        echo "$* is an animal"

%-fox: %-fox-animal

%-wolf: %-wolf-animal

最後の 2 つのターゲットの違いは、"%-wolf" にはレシピがなく、"%-fox" には空のレシピがある (つまり、最初にタブがある行だけ) ということです。

ルールを実行しようとすると、次のようになります。

[root@cv19 tmp]# make freddy-animal
echo "freddy is an animal"
freddy is an animal
[root@cv19 tmp]# make freddy-wolf
make: *** No rule to make target `freddy-wolf'.  Stop.
[root@cv19 tmp]# make freddy-fox
echo "freddy-fox is an animal"
freddy-fox is an animal

つまり、レシピを持つパターン ルール (空のものではありますが) は機能しますが、レシピを持たないパターン ルールは機能しません。それが機能するはずの方法で何かが欠けていますか?

4

1 に答える 1

15

レシピをまったく持たないパターン ルールは、レシピを提供するものとはまったく異なるものを意味するものとして文書化されています。代わりに、既存の暗黙のルールをキャンセルします

同じターゲットと前提条件でパターン ルールを定義することにより、組み込みの暗黙的なルールをキャンセルできますが、レシピはありません。

したがって、「%-wolf」パターンは、実際には%-wolf-animal -> %-wolfの既存の暗黙のルールをキャンセルするのに役立ちます。とにかく、1つもありませんでした。

于 2010-09-17T10:55:51.540 に答える