最終的な実行可能ファイルにリンクする前に、静的ライブラリにビルドする大量の自動生成コードを含むプロジェクトがあります。gcc/gnat 5.04a を使用します 非常に多くのファイルがあるため、ジョブをバッチに分割し、ar を複数回呼び出してライブラリを構築する必要があります (コマンドラインの長さの制限を回避するため)。
[echo] Archiving codegen
[echo] Deleting old codegen archive
[ar] Using ar found in /usr/bin
[ar] Batch 1 of 7 completed in 37.871 s
[ar] Batch 2 of 7 completed in 55.796 s
[ar] Batch 3 of 7 completed in 89.709 s
[ar] Batch 4 of 7 completed in 256.894 s
[ar] Batch 5 of 7 completed in 196.704 s
[ar] Batch 6 of 7 completed in 248.334 s
[ar] Batch 7 of 7 completed in 243.759 s
[ar] Archiving took: 1129.067 s
[ar] Using ranlib found in /usr/bin
[ar] Indexing took: 247.223 s
[echo] Done with codegen
潜在的な速度の改善を探しています。アーカイブが大きくなるにつれて、オブジェクトを追加する前に (更新を) 検索する必要があるため、各バッチにかかる時間がどんどん長くなるようです。これが、古いアーカイブをそのまま更新するよりも、アーカイブを削除する方が速くなる理由のようです。速度を上げるために、フラグ「qcS」を ar コマンドに使用します。マニュアルページによると、「q」(クイック追加する必要があります)は実際には「r」(「置換を使用」)の同義語であり、「c」はアーカイブを作成し(特別なものはありません)、「S」はスキップしますインデックスの生成 (最後に「ranlib」を使用してカバーします。
組み込みツールを使用して、この操作を高速化する便利な方法はありますか? 「クイック追加」モードが機能する場合、それはおそらく私たちが望んでいることですが、残念ながら.