GNU Makeファイルで注文専用の前提条件が処理される順序は何ですか?

GNU Makeファイルで注文専用の前提条件が処理される順序は何ですか?

私は読んでいた文書しかし、まだ注文がどのように処理されるのかわかりません。例では:

myrule: | myrule_step1 myrule_step2
    @echo "$(@)"

myrule_step1:
    @echo "$(@)"

myrule_step2:
    @echo "$(@)"

何を最初に印刷しますか? myrule_step1またはmyrule_step2

ベストアンサー1

順序は指定されていないどの順序でも実行できます。これは単なる理論的な質問ではありません。並列ビルド中に発生する可能性があります。質問と同じMakefileを想定して、次を実行します。

watch -n 0.1 make -j8

印刷に数秒しかかかりませんでした。

myrule_step2
myrule_step1
myrule

また、見ることができますこのStackOverflowの答え著者: Jörg W Mittag:

いいえ、順序は定義されていません。これはすべてですより宣言的依存性指向プログラミングを使用している場合:コンピュータは最高の評価順序を選択するか、実際に評価することもできます。同時に

しかし、mosvyが指摘したように、これはGNU Makeでのみ機能します。 POSIX make(makefileに特別なターゲットを追加して.POSIXGNU Makeでエミュレートできる)は、前提条件を処理するときに左から右の順序を指定します。

おすすめ記事