1

私のグループが、ソース ファイルの約 90% を共有する一連の大規模なアプリケーションを構築する方法を再編成しようとしています。現在、これらのアプリケーションは、私たちの管理下にない外部リンクのものを除いて、ライブラリを一切使用せずに構築されています。アプリケーションは同じ共通ソース ファイルを使用します (同じ .h/.cpp ファイルの 5 つのバージョンを維持していません) が、これらはどの共通ライブラリにも組み込まれていません。そのため、現時点では、バージョンをリリースするたびに、アプリケーションごとに同じコードを何度も作成する代償を払っています。私には、これはライブラリを使用して共有コードをキャプチャし、ビルド時間を短縮するための最有力候補のように思えます。DLL を使用するオプションがないため、アプローチは静的ライブラリを使用することです。

この仕事に取り組むためのヒントを教えてください。私は静的ライブラリの作成/整理の経験が限られているため、整理/落とし穴に対する基本的な提案でも大歓迎です。多分良い本の推薦でさえありますか?

各アプリケーションが共通に共有するファイルのサブセット全体を見つけることによって、簡単な演習を行いました。概念実証として、これらのファイルを単一の「Common Monster」スタティック ライブラリに配置しました。この単一の静的ライブラリを使用して完全なアプリケーションをビルドすると、すべてのアプリケーションのビルド時間が確実に改善されますが、このままにしておく必要がありますか? この形式のライブラリの目的はあまり焦点が絞られておらず、モジュール化の怠惰な試みのように見えます。これらのアプリケーションの開発は進行中であり、この設定が今後さらに問題を引き起こすのではないかと心配しています。

4

2 に答える 2

0

この分野で一般的なガイドラインを示すことは非常に困難です。ライブラリをどのように構成するかは、ライブラリの使用方法に大きく依存します。おそらく、私が自分のコードライブラリを説明する場合、これは役立つかもしれません:

  • すべてのアプリケーションで少なくとも50/50の確率で使用する必要があると私が予想するコードを含む1つの汎用ライブラリ。これには、文字列ユーティリティ、正規表現、式の評価、XML解析、およびODBCサポートが含まれます。おそらくこれは少し分割する必要がありますが、FOSSプロジェクトでコードを配布してモノリシックに保つのが簡単になります。

  • マルチスレッドをサポートし、スレッド、ミューテックス、セマフォなどのラッパーを提供するライブラリ。

  • ODBCではなくネイティブインターフェイスを介してSQLiteをサポートするもの。

  • MongooseCWebサーバーを囲むC++Webサーバーラッパー。

汎用ライブラリは、私が作成するすべてのもので使用され、その他はより特殊な状況で使用されます。各ライブラリのヘッダーは、ライブラリバイナリ自体と同様に、別々のディレクトリに保持されます(ただし、おそらく単一のlibディレクトリにあるはずです)。

于 2010-01-22T08:47:13.440 に答える
0

ライブラリの依存関係が非巡回有向グラフ (ツリー) を形成していることを確認してください。これは静的ライブラリでは必ずしも問題ではありませんが (実際にはわかりません)、dll に切り替える場合は問題になります。状況によっては、インターフェースの再設計が必要になる場合があります。

私が気付いたもう 1 つのこと (MSVC については確かです)。ビルド速度が重要な問題である場合は、これを検討してください。DLL は静的ライブラリよりもはるかに高速にリンクされます。これは、それらを新しい実行可能ファイルにコピーする必要がなく、未使用のコードを検索して削除する必要がないためだと思います。本番用のオプションではない場合でも、開発中にこのトリックを使用できます。

また、CMake を使用してソリューション ファイルを作成する習慣もあります。これは、GUI でオプションの無限のリストをクリックするよりも、ビルド プロセス全体を概観する方が簡単だからです。その道を歩むかどうかはあなた次第です。

于 2010-01-22T09:07:40.267 に答える