2017-12-08 1 views
1

58個のターゲットを持つ新しいメソーンプロジェクトがあります。それらの多くは同じ* .ccファイルを使用し、メソーンはターゲットごとに* .ccファイルを1回構築します。これはautotoolsよりもはるかに低速です。また、コンパイルフラグはターゲット間で同じにする必要があります。そのため、理論上メソンはオブジェクトを再利用できるはずです。多くのターゲットが同じC++ソースを使用する場合、どのようにMesonビルドを高速化しますか

メソーンでよくサポートされている多くのターゲットを構築していますか?このような状況のための標準的なソリューションはありますか?プロジェクトのすべてのソースを共有ライブラリに整理しようとする可能性がありますが、それらをグループ化する方法を決める必要があり、オートツールではそれを決める必要はありません。私はこれに関する文書を見つけることができなかった。

-BenRI

P.S.

--------ファイル:app1.cc -------

int f(int x ,int y) {return x;} 
int main() { return f(0,1);} 

------ファイル:ここでは、最小限の例ですmeson.build - ---

project('app12','cpp') 
executable('app1',['app1.cc']) 
executable('app2',['app1.cc']) 

----------コマンド-----------

% meson . meson 
% cd meson 
% meson configure -Dwarning_level=3 
% ninja 

あなたのsh使用されていないパラメータ「y」の警告が2回表示されます。 ファイルcompile_commands.jsonには、app1.ccの2つのエントリもあります。あなたは、日付と時間 ようunreproducible build tricksを持っていない限り、それは同じ バイナリファイルを生成しますので、再び同じ再び同じコンパイルフラグでコンパイルされたソースと を持つ

+0

[ドキュメント](http://mesonbuild.com/Build-targets.html#object-files)でターゲット間のオブジェクトファイルの再利用について議論しましたか? – Useless

+0

を表示するMCVEを作成していないので、より具体的にすることは不可能です。うん、それを読んだ。上記の方法で単体テスト実行可能ファイルを生成するためにのみ、この機能を使用することを強くお勧めします。また、ビルドターゲット間で共有されているソースファイルごとに抽出されたオブジェクトを手動で作成することは、システムが既に知っているものをユーザーが指定し、ユーザーが間違ってしまう可能性があるため、中間子のようには見えません。 –

+0

MCVEを追加することができますが、各ターゲットのソースファイルを再構築すると、認識された動作(私は思います)が表示されます。 –

答えて

0

はCPUパワーのちょうど腰です。

のコードをビルドして ターゲットバイナリのすべてから再利用すると、を使用するだけで、すべてのターゲットの共通コードを作成することができました。

f()lib.ccに移動し、meson.buildを使用してください。

project('app12','cpp') 
mylib = static_library('mylib', 'lib.cc') 
executable('app1', 'app1.cc', link_with : mylib) 
executable('app2', 'app1.cc', link_with : mylib) 
+0

私は共有コードを静的ライブラリに移動することは、確かに中間体開発者が推奨するアプローチだと思います。私はこれをし、それは正常に動作します。興味深いことに、非常に多くのオブジェクトを含む静的ライブラリをすべてのターゲットにリンクすると、実行可能ファイルのサイズは大きくなりますが、実際はサイズが大幅に縮小されることに心配していました。 –

関連する問題