14

サード パーティの makefile があり、カスタム ターゲット (T2) が最初にビルドされるまで、ターゲット (T1) の 1 つをビルドしないようにしたいと考えています。通常、これは T2 を T1 の前提条件にすることによって達成されます。しかし、T1 はそのルールの 1 つで $^ を使用します。そのため、前提条件を追加することで、ビルドを壊すことになります...私が持っているものは次のとおりです。

T1: x y z T2
    $(MAKE) -j $^;
    # fails because T2 should not be passed to the make!!!

.PHONY: T2

T2:
    #do some linking and prep for T1

T2 が T1 の前に実行されるようにする良い方法はありますか? (注: 上記の例は、実際には少し単純化されています。T1 は、実際には Linux カーネル makefile 内の vmlinux ターゲットであるため、書き直すのは難しいだけでなく、コードの移植性がなくなります。また、T2 を実行する前に T2 を実行することはできません。他の依存関係のために、カーネルで make を呼び出します)。

4

2 に答える 2

24

注文のみの前提条件として T2 を持っている:

T1: x y z | T2
    $(MAKE) -j $^;
    # Make will run the T2 rule before this one, but T2 will not appear in $^
于 2013-01-10T22:56:04.417 に答える
1

2 つのターゲットを適切な順序で指定して、ビルド スクリプトで Make を呼び出してください。

make T2 T1

そうすれば、T1 を変更する必要はありません。

于 2013-01-10T21:33:21.823 に答える