私は、前提条件が異なる複数のターゲットを持っていますが、すべてのターゲットに対して再利用したいビルルールは同じです。ここで
は、私がこの仕事のために書いたのmakefileです:
test1 := a b
test2 := b c
all: test1 test2
test1 test2: $([email protected])
@echo [email protected]
@echo $([email protected])
@echo $^
私はmake
を実行した場合、私は次のような出力を得るでしょう:
test1
a b
test2
b c
私は何を期待されています:
test1
a b
a b
test2
b c
b c
ご覧のとおり、問題は$ ^が空です。 $([email protected])
はルールの右側には使用できません。だから$^
は空です。だからmake
はa
b
とc
のターゲットがないという警告も出されません。本体$($ @)の内部は、期待通りに動作することに注意してください。
make test1
を呼び出すとき
$([email protected])
が
$(test1)
にequivaletしたい
と$(test2)
に私は私のメイクファイルには、次のメイクファイルに相当しますmake test2
を呼び出す:
test1 := a b
test2 := b c
all: test1 test2
test1: $(test1)
<build-command>
test2: $(test2)
<the same build-command>
しかし、私はこれらを繰り返したくはありませんすべてtestn
の2行私は、異なる依存関係を持つ異なるターゲットのビルド規則を1つ作成します。
申し訳ありませんが、私は質問を更新しました、今より良いと思っています – DartLenin
この魔法のsecondexpansionは私が探していたものでした – DartLenin