7

短い質問:

props ファイルのパスを props ファイル内からマクロとして使用できるようにしたい (プロジェクト ディレクトリを として参照する機能など$(ProjectDir))

長い質問

props ファイルを使用して、さまざまなサードパーティ ライブラリへの参照を追加します。

これは、サードパーティ ライブラリへの絶対パスを指定できれば簡単です。

ただし、相対パスを指定したいと考えています。チーム メンバーごとにソース管理ツリーの場所が異なるためです。そのような相対パスを小道具ファイルに追加する方法はありますか?

プロジェクトディレクトリからの相対パスを指定することも、プロジェクトの場所が固定されていないため、良い解決策ではありません (そのため、あるプロジェクトでは必要$(SolutionDir)\..\XXXXになり、別の プロジェクトでは必要になります)。$(SolutionDir)\..\..\XXXX

4

3 に答える 3

20

解決策は次のとおりです: $(MSBuildThisFileFullPath)(または、むしろ$(MSBuildThisFileDirectory))(これは、ここで通過する際に指摘されています。)

これがプロパティ シート ファイル ( .props) 内で使用される場合、このプロパティ ファイル/ディレクトリ自体を参照します。(注:.vcxprojレベルで使用する場合、プロジェクト ファイル/ディレクトリを参照します。

VS2013 RC および VS2010 でテスト済み。

于 2013-10-11T11:04:59.830 に答える
5

@John Dibling: これは、同時ブランチで作業するグループにとって悪い解決策です。常に環境を切り替えるか、各ブランチの .props ファイルをローカルで編集する必要があります。ブランチを頻繁に切り替えていると悲惨です。

残念ながら、私はより良い解決策を見つけることができないようです。私の頭の中では、最上位の .props が PROJECT_ROOT (「../../」として定義) のようなユーザー マクロを定義し、他の .props ファイルがそのマクロを継承して使用するようなものです。こうすることで、1 つの .props ファイルを複数の異なる相対パスのソリューションと共有できます。残念ながら、.props ファイルではユーザー マクロが継承されないようです。

複数のブランチにまたがる静的なディレクトリ構造が与えられた場合、ビルド環境をローカルで構成する必要のない、これに対する実際の解決策が必要です。

編集:

本当に、これに対する解決策を見つけたようです。基本的に、相対パスでユーザー マクロを定義する relativepath.props ファイルが 1 つあり、すべてのパスにそのマクロを使用する別の props ファイルがあり、実際に vcxproj にインポートするファイルは、両方のプロパティ シートを含めて次のようになります。 . それが、あるファイルのマクロを他のファイルで使用できるようにする唯一の方法です。

次に、異なる相対パスの異なるソリューションは異なるパスを使用できますが、プロパティは realprops.props で一度だけ定義されます。

  <ImportGroup Label="PropertySheets">
      <Import Project="relativepath.props" />
      <Import Project="realprops.props" />
    </ImportGroup>
于 2012-05-10T14:20:25.307 に答える
1

私はあなたが相反する利益を持っていることをお勧めします:

  1. すべての開発者が使用する props ファイルを提供し、開発者が#includeパスを修飾する必要をなくします
  2. すべての開発者がこれらの#includeパスのルートの場所を指定できるようにします。

これはあなたが探していた答えではありませんが、別のアプローチを取ることをお勧めします。

次の 2 つが思い浮かびます。

  1. 各開発者がMicrosoft.Cpp.x64.userなどのファイルでビルド時のマクロを定義できるよう$(MY_PROJECT_ROOT)にし、チェックインされた props ファイルで、それらのマクロに関連するディレクトリを指定します。

  2. チェックインされた小道具ファイルで絶対パスを使用しますが、その絶対パスをX:\. 各開発者は、どこX:\を指すかを定義します。

番号 2 には、トランク間の切り替えが少し簡単になるという利点があります。おそらく、アプリケーションのリリース 1.0 をアプリケーションの Beta 2.0 とします。両方で同じ props ファイルを使用できます。開発者は、あるトランクから別のトランクに移動するときに、バッチ ファイルを実行してジャンクションを切り替えるだけです。

ただし、ナンバー 1 には、IDE 内に完全に含まれるソリューションであるという利点があります。

于 2012-05-01T16:35:14.513 に答える