1

メイクファイルには次のものがあります。

.PHONY: preq_test a b c d

a b c d:
    @echo building $@

preq_test : a b | c d
    @echo preq prequisites are: $^;

$^ドキュメントに従って、すべての前提条件 (重複を除く) をリストすることになっています。

$^
$+
    The names of all the prerequisites, with spaces between them. For prerequisites
    which are archive members, only the named member is used (see Archives). The value
    of $^ omits duplicate prerequisites, while $+ retains them and preserves their
    order.

ただし、注文のみの前提条件は には表示されません$^

building a
building b
building c
building d
preq prequisites are: a b

今後の現在の動作に頼ることができますか、それとも別の方法で動作するはずですか、またはこれは未定義の動作と見なす必要がありますか?

ありがとう、

ジョン

4

2 に答える 2

6

$^文書化された動作は、注文のみの前提条件を省略することであるため、それを信頼できます (注文のみの前提条件だけを取得するために使用することもできます)。 $|

于 2013-01-10T21:31:42.677 に答える
2

はい、アントンが言ったように、使用する必要が$^ある後に依存関係を印刷するために、注文のみの前提条件はリストされません。|$|

以下のメイクファイルコードを確認してください。

あいうえお:

      @echo building $@

preq_test : ab | CD

      @echo preq prequisites are: $^ $|;

詳細については:

$^ すべての前提条件の名前 (間にスペースを含む)。アーカイブ メンバーである前提条件の場合、指定されたメンバーのみが使用されます (アーカイブを参照)。ターゲットは、各ファイルが前提条件として何回リストされていても、依存する他の各ファイルに対する前提条件を 1 つだけ持っています。したがって、ターゲットの前提条件を複数回リストすると、$^ の値には名前のコピーが 1 つだけ含まれます。This list does not contain any of the order-only prerequisites; for those use $| variable.

$+ これは に似$^ていますが、複数回リストされている前提条件は、makefile にリストされている順序で複製されます。これは主に、ライブラリ ファイル名を特定の順序で繰り返すことが意味のあるリンク コマンドで使用する場合に役立ちます。

$| The names of all the order-only prerequisites, with spaces between them.

于 2013-01-11T11:58:16.797 に答える