いくつかのオープンソースライブラリをCプロジェクトに組み込みたいです。私がこれを行うのはこれが初めてなので、それを行うための正しいまたは最も一般的な方法が何であるかわかりません。
私が取ることができる2つの可能なパスが表示されます。
オプション#1は2つの理由でより良いと思います:
しかし、私はちょうど考えるオプション#1の方が優れています。何が一番いいのか本当にわかりません。たぶん、誰かがライブラリ間の競合を修正する方法を知っていて、私の意見が変わるかもしれません。私がこの質問をしているのは、プログラマが通常取る道がわからないためです。また、各代替案の長所と短所が何であるかもわかりません。また、他に選択肢があるかどうかもわかりません。
pdate:想定されるユーザーはプログラマーです。
@ 17of26は、#2が危険である理由、および#1がより理にかなっている理由を数多く示しました。ただし、不足していることが1つあると思います。そのため、次のことをお勧めします。
可能な場合は変更を避けてください。それが不可能な場合は、直接の変更を最小限に抑え、他のすべてを個別のファイルに保存してください。必要に応じて、スクリプトファイルまたはパッチファイルを使用します。そのため、libsまたはmakefile構成に対するすべての変更が文書化され、再現できることを確認してください。
これにより、必要に応じて、後でこれらのライブラリの新しいバージョンに更新する機会が増えます。
もちろん、libのバージョン1.0に適用されたパッチまたは構成の変更が、そのlibのバージョン2.0にも直接適用できるという保証はありません。しかし、パッチ/変更の数が少ない場合、可能性ははるかに高くなり、それらを適用するための労力はおそらく少なくなります。
プロジェクトとの依存関係は常にパッケージ化する必要があります。
ソフトウェアは、特定のライブラリの特定のバージョンでビルドおよびテストされます。他のバージョンでの動作は保証されていません。
その正確なバージョンのライブラリをコードに同梱する必要があります。そうでなければ、あなたはサポートの悪夢への扉を開いています。
たとえば、ライブラリFoo v1.0を使用してコードをビルドおよびテストするとします。製品にFoo v1.0を同梱せず、代わりに「ユーザー様、このライブラリFoo v1.0を入手してください」と言います。
想像してみてください:
ソフトウェアが動作するために必要な正確なバイナリを出荷することにより、これらの潜在的な頭痛のすべてを回避します。
サードパーティのコードを管理する一般的な方法は、「ベンダーブランチ」を使用することです(私は、git、svnなどのバージョン管理システムを使用していると思います)。
ベンダーブランチを使用すると、サードパーティのコードへの変更を追跡し、それらの変更をコードに簡単に組み込むことができます。また、それらの変更を処理するためにコードに加える必要がある変更も簡単に組み込むことができます。
ベンダーブランチの主題は複雑すぎてここに入ることができません(詳細は使用しているvcによって異なります)が、Webには多くの便利なガイドがあります。