3〜4種類のオープンソースC/C++ライブラリを使用するプロジェクトがあります。
これらのライブラリをいくつかのプラットフォーム用にビルドし、プロジェクトのさまざまなプラットフォーム用のインクルードファイルとスタティックライブラリをチェックインしました。
しかし、私はいくつかの問題に苦労しています。これらのプロジェクトはすべて、依存関係管理に関するものです。そして、私はベストプラクティスのアドバイスを探しています。
1)何を使用しているのか正確に知る方法はありますか?
静的libのバージョンを取得する方法がありません。その結果、私が使用している静的libのバージョンを何らかの形で追跡する必要があります(SHAビルド元のコミットの可能性があります)?
これらのライブラリをいつアップグレードするかを理解する必要がある場合、これは特に重要です。
2)ビルドを再現するにはどうすればよいですか?
特定のプラットフォーム用の特定のライブラリーを構築するのに苦労したかもしれません。それを理解するのにしばらく時間がかかりました。
次回同じライブラリを構築する必要があるのは、半年後(なんらかの理由でアップグレードが必要になる時期)になる可能性があります。しかし、そのときまでに、それが構築された環境と環境をはっきりと覚えていません長い間なくなります。
3)これらのライブラリをフォークしてソースコードのコピーを作成する必要がありますか?
これはそれほど問題ではありません。しかし、それはまだ懸念事項です。ビルドが再現可能であることを確認するのはいいことです(そのようなソースコードが必要です)。
依存ライブラリの正確なバージョンを常に使用する必要がありますか?それはひどく書かれていますか/バージョンのマイナーな増加ごとにAPIを壊していますか?
オープンソースプロジェクトを見ると、それらのビルド(configure
部分はほとんど)スクリプトは、さまざまなライブラリが存在するかどうかを確認し、存在しない場合はエラーをスローします。また、ユーザーが新しいバージョンのライブラリ(おそらく古いバージョンよりも多くのバグ/セキュリティ修正を提供する)にリンクできるほど柔軟であり、静的または動的なリンクを強制しません。
本当に再現可能なビルドが必要な場合は、コンパイラの正確なバージョンとその標準ライブラリ、おそらくオペレーティングシステムにも注意を払う必要があります。この場合、必要な正確な環境を備えたビルドマシンを用意することは、私の意見では、ソースコードリポジトリのコンパイル済みライブラリをチェックインするよりも優れています。
何を使用しているのか正確に知るにはどうすればよいですか?
インクルードファイルまたはlibsファイルにバージョン番号がまだ含まれていない場合は、テキストファイル "version.txt"(バージョン番号を含む)を各libフォルダーに自分で追加し、libおよびincludeファイルとともにVCSにチェックインします。 。ただし、libの完全なソース(バージョン3)をバージョン管理する場合、バージョン番号を含むソースコードファイルがすでに存在する可能性が高いため、この場合のために独自のバージョンを維持する必要はありません。
ビルドを再現するにはどうすればよいですか?
できるだけ自動化してください。お気に入りのビルドツールのスクリプト、makefile、またはファイルを使用します。これをすべてソース管理下に置きます。手動の手順が必要な場合は、詳細をテキストファイル(たとえば、readme_build.txt)に書き留め、それもソース管理下に置きます。
これらのライブラリをフォークしてソースコードのコピーを作成する必要がありますか?
ソースコードのコピーが必要ですが、forkのみ必要な場合(たとえば、あなたが緊急のバグにつまずいて、元の作者があなたの時間の制約内でそれを修正できない場合)。または、作成者があなたとは異なるコンパイラ環境を使用しており、環境でlibを機能させるためにいくつかの変更を加える必要がある場合。ただし、フォークの元のソースコードを変更するたびに、後で更新を統合することが難しくなる可能性が高いことに注意してください。
それにもかかわらず、使用しているライブラリの元の(フォークされていない)ソースコードのコピーを入手することをお勧めします。これにより、元のメンテナがパブリックWebからlibソースを取り消すことを決定した場合でも、必要になったときに後でlibをフォークまたはメンテナンスできます。