3

Visual C++2010ソリューションのいくつかのプロジェクトでBoostライブラリを使用しています。私が現在行っているのは、次の設定によって各プロジェクトのプロパティを変更することです。

  1. プロパティ->構成プロパティ->C/C++->一般->ブーストディレクトリを含めるための追加のディレクトリを含めるC:\boost\boost_1_47

  2. [プロパティ]->[構成プロパティ]->[リンカー]->[一般]->[追加のライブラリディレクトリ]を選択して、boostlibディレクトリを追加しますC:\boost\boost_1_47\lib

ブーストバージョンを1.51にアップグレードしているので、この情報を複数回(つまり、プロジェクトごとに1回)指定することで、DRYに違反していることに気付きます。ブースト情報を1か所で定義したい。

調査したところ、プロパティシートは良い解決策のようです。プロパティシートの継承について読みましたが、プロジェクト固有のインクルードディレクトリを追加する場合は、その特定のプロジェクトのプロパティに追加のインクルードディレクトリを設定する必要があるように思われるため、これがどのように役立つかわかりません。次に、ブーストインクルードディレクトリを定義する継承されたプロパティシートを上書きします。私がこれについて間違っているならば、私を訂正してください。

したがって、次の考えは、GlobalMacros.propという単一のプロパティシートを作成し、次のようなユーザーマクロを定義して$(BoostDir)から、このプロパティシートを各プロジェクトに追加することです。次に、インクルードディレクトリとライブラリディレクトリを定義するときに、各プロジェクトのプロパティでマクロを使用できます。ただし、マクロを作成するときに「このマクロをビルド環境の環境変数として設定する」オプションがあり、それが何をするのか、または設定する必要があるのか​​わかりません。

全体として、一般的な設定で繰り返される構成定義を減らすための最良の方法を知りたいですか?

4

1 に答える 1

4

私は実際には、VS2005でVisualC ++にプロパティシートを最初に実装した開発者です(ただし、VC ++プロジェクトのプロパティダイアログである混乱については責任を負いません)。警告:2005年以降、VC ++での作業を停止したため、以下はご使用のバージョンでは完全に正確ではない可能性があります。

プロパティマネージャーでは、すべてのプロジェクトのすべてのプロジェクト構成を複数選択して、新しいプロパティシートを追加できるはずです。これにより、同じプロパティシートからこれらのプロジェクト構成が自動的に継承されます。そのプロパティシートで、ブーストインクルードディレクトリとライブラリディレクトリを直接設定するか、BoostVersionBoostDirのマクロを使用して、プロパティシートのプロパティでこれらのマクロを使用します。

プロジェクト構成で[親またはプロジェクトのデフォルトから継承]がオンになっている場合(これにより、2005/2008では$(Inherit)と$(NoInherit)の挿入が制御され、2010/2012では%(<propertyname>)が制御されます)、これらのプロパティを使用する必要があります。デフォルトでプロパティシートの値の前に追加されたプロジェクト構成で設定されたプロジェクト固有のプロパティを参照してください。

これを確認するには、プロジェクトに移動し、コンパイラの[コマンドライン]タブをチェックして、スイッチが期待どおりかどうかを確認します。

編集:VC ++には、「単一値」と「複数値」の2種類のプロパティがあることに注意してください。単一値プロパティの例は、コンパイラの警告レベルです。単一値プロパティのコマンドラインの値は、プロジェクト構成、プロパティシート、プロジェクトシステムの組み込みのデフォルトの順に、それを指定するプロパティ継承チェーンの最初の場所から取得されます。複数値プロパティの例は、コンパイラのインクルードディレクトリです。$(NoInherit)が指定されていない(2005/2008)か、%(<propertyname>)が指定されていない(2010/2012)場合を除き、複数値のプロパティは親プロパティシートと連結されます。したがって、デフォルトでは、

于 2012-12-22T22:52:33.620 に答える