2

さまざまなプラットフォームで構築できるプロジェクトを開発したいと思います。プロジェクトコードはC++になりますが、ライブラリを管理するための最良の方法は何ですか?

Boostとその単体テストフレームワークにも依存するため、ビルドシステムとしてbjamを使用する予定です。

2つの依存関係はBoost自体とFLTKです。

ライブラリ管理で頭に浮かぶ可能性は次のとおりです。

  1. ツリー内でサポートされているすべてのプラットフォームのビルドアーティファクト(バイナリ)とヘッダーを含める
  2. ツリー内のすべてのライブラリ依存関係の完全なソースを含め、何らかの方法でそれらを依存関係としてスクリプト化します
  3. node.jsがv8で行うように、1と2の組み合わせ
  4. ライブラリを自分でビルドしてから、LIBcurlが依存関係で行うように、PATHまたは特別なディレクトリにライブラリを配置する必要があることをユーザーに通知します。
  5. * nixビルドツール(つまりlibtool)のmozillaスタイルに依存し、WindowsでビルドするにはMSYSを使用する必要があることをユーザーに伝えます

ここでの最善のアプローチは何ですか?プロジェクトはおそらく今後6か月で数千行を超えることはないでしょうが、後で戻ってすべてを切り替える必要がないように、ここで正しい選択をしたいと思います。

4

1 に答える 1

1

これは主観的な答えです。

まず、Boostについて:Boostが構築されたら、どのような方法でも、bjamを使用する必要はありません。したがって、特定のライブラリがシステム上または特定のパスにあることを要求しながら、自分に合った任意のビルドシステムを使用できますが、それらはビルドされます。補足として、ブーストの多くはヘッダーのみです(単体テストフレームワークでもヘッダーのみのIIRCを使用できますが、ライブラリバージョンを使用することをお勧めします)。ブーストバイナリが必要だとしましょう。

プロジェクトIMOを処理する最良の方法は、自分のプロジェクトに最も適した自分で選択したビルドシステムを使用し、依存関係(ブースト)を「事前にビルド」する必要があることです。それらがどのように事前構築されるかは、各依存関係によって異なります。選択したものと同じビルドシステムを使用するものもあれば、独自のビルドシステムを使用するものもあります。一部はすべてのプラットフォーム用に作成されます。たとえば、一部はWindowsでコンパイルされますが、Windowsに適した最適なビルドシステムを備えていません。それらが小さなライブラリである場合は、ビルドシステムに統合できます。そうでない場合は、プロジェクトをビルドする前に開発者が「何らかの形で」持つ必要がある「依存関係」と考えてください。ここでの「どういうわけか」は、READMEで説明されます。

たとえば、プロジェクトにはcmakeを使用しますが、プロジェクトではBoostと他のいくつかのライブラリを使用します。cmakeを使用すると、MSVC、C :: B、GNUMakeなどのプロジェクトファイルを生成できますが、cmakeを使用してすべての依存関係を設定することはできません。非常に小さくて安定したライブラリの場合、それらのライブラリ用にcmakeプロジェクトを作成できます。そうすれば、物事は非常に簡単になります。より大規模またはより揮発性の高いライブラリの場合は、それぞれを独自のビルドシステムに任せるのが最善です。揮発性ライブラリは頻繁に変更されるため、それらの「カスタム」を構築する場合は、ライブラリの変更に合わせて「カスタマイズ」を常に調整する必要があります。使用するライブラリごとに、BOOST_LIB_INCLUDE_PATHS、BOOST_LIB_LIBRARY_PATHS、BOOST_LIB_LIBRARIESなどのcmake変数があります。これらは、開発者がプロ​​ジェクトをコンパイルすることで、それらの値に定義できます。

これらのライブラリにソースを提供するかどうかは自分で決めることができます。特にライブラリの特定のバージョンに依存したい場合は、何も問題はありません。しかし、それらを依存関係としてスクリプト化することは、揮発性ライブラリのメンテナンスに加えて、大きな混乱になる可能性があります。

ただし、Google Chromiumプロジェクトが構築されると、100のライブラリがダウンロード、チェックアウト、構築、リンクされることを私は知っています。ChromiumはビルドシステムIIRCとしてGYPを使用しています。

于 2012-09-19T01:46:37.020 に答える