web-dev-qa-db-ja.com

ビルドサーバーでのc / C ++依存関係管理のベストプラクティス?

私は主にJava mavenまたはant/ivyで開発しています。c++プロジェクトのビルドの依存関係を管理するための推奨される方法はありますか?ビルドサーバーでビルドを設定していますが、頭に浮かぶのは、依存ライブラリが変更された場合、どのように追跡すれば古いビルドは影響を受けないが、新しいビルドは新しいバージョンのライブラリを使用できるかということです。

簡単な考えの1つは、サードパーティのライブラリをすべて自分のリポジトリに移動し、それらを次のように参照することです。

#include "sqlite3.h"
#include "mosquitto.h"

の代わりに

#include <sqlite3.h>
#include <mosquitto.h>

誰かがこれを本番環境で最適に行う方法を推奨できますか?

1
simgineer

サードパーティのビルドの依存関係をリポジトリに移動することは完全に問題なく、いくつかの利点があります(たとえば、バージョンの不一致がないこと、アップグレードの追跡など)。しかし、そうすることはあなたのコードに触れるべきではありません。

C/C++は include path を使用して、そのように含まれているライブラリを見つける場所を決定します

#include <...>

ツールチェーンとビルドシステムに応じて、これを構成するには異なる手順に従う必要があります。いずれにしても、最善の方法は、各依存関係を含むサブフォルダーを含む「third_party」フォルダーを作成することです。次に、各thoseフォルダーをインクルードパスに追加して、既存のインクルードディレクティブが機能するようにします。

CMakeでは、これを実現するためにtarget_include_directoriesを使用する必要があります。 GCCまたはclangを使用したプレーンなMakefileでは、各フォルダーに-Iフラグを追加します。

3
Alex Reinking