2016-07-26 3 views
0

私は、前提条件が異なる複数のターゲットを持っていますが、すべてのターゲットに対して再利用したいビルルールは同じです。ここで

は、私がこの仕事のために書いたの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])はルールの右側には使用できません。だから$^は空です。だからmakeabcのターゲットがないという警告も出されません。本体$($ @)の内部は、期待通りに動作することに注意してください。

私は 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つ作成します。

答えて

2

あなたの質問は非常に不明ですが、私はそれを刺すでしょう。私は、これはあなたが欲しいものだと思う:

all: test1 test2 

test1: a b 
test2: b c 

test1 test2: 
    @echo building [email protected] from $^ 

a b c d: 
    @echo how to build [email protected]?... 

EDIT:

すべての権利、今これはXY problemように見え始めています。

あなたが望むものがtestnのすべてのターゲットをカバーする1つのルールであれば、私が上に書いたことはそれを行います。

何をしたいこと(問題の検索で曖昧な解決策として私を打つ)そのターゲットの前提条件のリストには、これはそれを行うだろう、名前はターゲットの名前で変数を拡張する場合:

.SECONDEXPANSION: 
test1: $$([email protected]) 
    @echo building [email protected] from $^ 
+0

申し訳ありませんが、私は質問を更新しました、今より良いと思っています – DartLenin

+0

この魔法のsecondexpansionは私が探していたものでした – DartLenin

関連する問題