2011-09-09 5 views
1

C++でコンパイルするプロジェクトをVSまたはmakeに設定する場合、サードパーティのライブラリのインクルードパスで使用される環境変数を設定するためのベストプラクティスは何ですか?変数にバージョン番号を含めますか?すなわち THIRD_PARTY_LIB_3_1_1 = C:3.1.1 \サードパーティ製\ \ライブラリ:その後、\ライブラリ\ 3.1.1サードパーティのライブラリへのインクルードパスのバージョン情報を環境変数に入れるのは良いですか?

\サードパーティとは、$(THIRD_PARTY_LIB_3_1_1が)あなたのパス

または THIRD_PARTY_LIB = Cを含んで含まれてい\しますあなたのインクルードパスに$(THIRD_PARTY_LIB)\ includeがある

バージョン番号を持つ利点は、あなたが指しているはずのバージョンを知っていることです。すべてのプロジェクト/ makeファイルを更新する必要があります。

環境変数にバージョン番号を持たない主な問題は、明示的ではなく、異なるバージョンを使用する2つのプロジェクトがある場合、メンテナンスの悪夢となり、ビルドを再現することはほとんど不可能です。

答えて

2

です。

ビルドシステムがその情報を使って動作を変更する方法について考える必要があります。それはあなたがそれを一つまたは他の名前にしても、まったく違うことはしません。

同じビルドに同じバージョンの複数のバージョンを含める必要がある場合は、区別する必要があります。それ以外の場合は、プロジェクト固有のコードでパスを指定すると、十分にクリアなものにする必要があります。

バージョン番号を持つことの利点は、あなたが下側、を指すことになっている バージョンが、バージョンを変更するとき 、あなたのプロジェクトのすべてを更新する必要がある/作るか知っているということです ファイル

誰かが変数名ではなくパスを変更した場合、パスまたは変数名は正しいでしょうか?それは愚かな考えのようなものですね。他の誰かが変数名を変更せず、あなたが何かが壊れている理由を理解しようとしている人なら、あなたもそれを後悔します。

私は 環境変数にバージョン番号を持っていないで見る主な問題は、それが明示的ではないということです、そしてあなたは、異なるバージョンを使用する2つの のプロジェクトを持っているならば、それはメンテナンス 悪夢になり、ビルドを再現ほぼ不可能です。

ビルドファイルとサードパーティライブラリは、ソース管理する必要があります。ビルドシステムでは、リリースビルドを作成するときにこれらのすべてを記録する必要があります。通常は、ビルドシステムがコードベースの完全なチェックアウトを行い、ビルドが正しいことを確認する必要があります。この副作用として、リビジョン番号も知っているはずです。

私の経験では、環境変数には依存するのが問題であり、ますます特定の環境変数が問題になることがあります。何度もあなたがそれらを必要とするので、私はそれを使うのが間違っているとは言えません。しかし、トップレベルのソースパス環境変数は1つしか持てません。あなたのビルドシステムがそれに基づいたパスを使うことができるならば、それは失敗する単一の場所です。単一のライブラリごとに1つのライブラリがある場合は、失敗のポイントを増やします。

+0

環境変数の代替はありますか?ライブラリとインクルードファイルへのパスをハードコーディングする際の問題は、変更を加えた場合、すべてのプロジェクトを通過して設定を変更する必要があることです。 – bpeikes

+0

@bpeikes相対パスの使用は1つのオプションです。 * project *固有のハードコーディングされたパスを持つことは問題ありません。異なるマシン上の異なる人は、これらのことを混乱させるべきではありません。私はCMakeを使ってこの問題を解決することを好みます。 CMakeでは、環境変数が必要な場合は、すべてのビルドではなく、設定時にレンダリングされます。これにより、同じシステム上に2つの作業用バージョンを持つことができます。 –

関連する問題