私はGNU makeを使用して静的ライブラリのグループを作成しています。そのために暗黙のmakeルールを使用しています。これらのルールはar(1)コマンドを実行してライブラリ/アーカイブを更新します。ビルド中に並列ジョブを実行するために-jオプションを使用すると、プロファイリングによってビルド時間が短縮されることがわかりました。アーカイブファイルの並列ビルドにGNU makeを使用するときの並行性の問題を避けるにはどうすればよいですか?
残念なことに、GNU makeマニュアルには、ar(1)を実行するための並行処理ガードがなく、アーカイブを破損する可能性があります。このマニュアルでは、これが将来修正される可能性があることがさらに分かります。
http://code.google.com/p/ipcmdを使用することです。コマンドを実行する前に基本的にセマフォーロックを行い、アーカイブを構築するar(1)コマンドをシリアル化します。この特定の解決策は、Windows上でmingwベースのクロスコンパイルツールを使用して構築しているため、私にとってはあまり役に立ちません。
この問題の解決方法は簡単ですか?
私はあなたがアーカイブではなく、objsをranlibする必要があると思います。おそらく$ ^をルール内のオブジェクトファイルに使うこともできます。 – user1143888