2

この質問は、ファイル レベルで既に回答されています。しかし、私はかなり多くのプロジェクト間依存関係を持つより大きなプロジェクトを持っています (動的に生成された DBus ヘッダーが原因です)。

次のを作成しました( ZIP 形式のサンプル ファイル- 実際のプロジェクトはもっと複雑です)。

トップレベルMakefileは次のとおりです。

sub-%:
    $(MAKE) -C $(patsubst sub-%,%,$@)

default:
    $(MAKE) -j12 sub-p1 sub-p2 sub-p3

サブプロジェクトの Makefile は次のようになります ( p1p2およびp3):

all: p1

../lib/lib.a:
    $(MAKE) -C ../lib lib.a

p1: ../lib/lib.a
    cp -f ../lib/lib.a p1

の Makefile は次のlibようになります。

lib.a:
    sleep 2
    date > $@
    echo Done with building $@

問題: ライブラリはp*プロジェクトごとに並行してビルドされます。この例では問題ありませんが、この例では解決できない問題が発生します。

トップレベルで呼び出すとmake、次の出力が得られます。

$ make
make -j12 sub-p1 sub-p2 sub-p3
make[1]: Entering directory '/home/kkr/tmp/parallelmake'
make -C p1
make -C p2
make -C p3
make[2]: Entering directory '/home/kkr/tmp/parallelmake/p1'
make -C ../lib lib.a
make[2]: Entering directory '/home/kkr/tmp/parallelmake/p2'
make -C ../lib lib.a
make[2]: Entering directory '/home/kkr/tmp/parallelmake/p3'
make -C ../lib lib.a
make[3]: Entering directory '/home/kkr/tmp/parallelmake/lib'
make[3]: Entering directory '/home/kkr/tmp/parallelmake/lib'
make[3]: Entering directory '/home/kkr/tmp/parallelmake/lib'
sleep 2
sleep 2
sleep 2
date > lib.a
date > lib.a
date > lib.a
make[3]: Leaving directory '/home/kkr/tmp/parallelmake/lib'
make[3]: Leaving directory '/home/kkr/tmp/parallelmake/lib'
make[3]: Leaving directory '/home/kkr/tmp/parallelmake/lib'
cp -f ../lib/lib.a p3
cp -f ../lib/lib.a p1
cp -f ../lib/lib.a p2
make[2]: Leaving directory '/home/kkr/tmp/parallelmake/p3'
make[2]: Leaving directory '/home/kkr/tmp/parallelmake/p1'
make[2]: Leaving directory '/home/kkr/tmp/parallelmake/p2'
make[1]: Leaving directory '/home/kkr/tmp/parallelmake'

質問: サブプロジェクトを何らかの方法で自動的に同期することは可能ですか?

real projectは 13 のサブプロジェクトがあり、そのほとんどがプロジェクト間の依存関係を持っているため、手動で同期するのは非常に困難です。

4

1 に答える 1