10

ここにリストされているプロジェクト設定で Visual Studio が使用するマクロがたくさんあります。これらのマクロまたは識別子が実際のスクリプト ファイル (プロジェクト設定ではなく) で定義されている場所を見つけることができません。

私の場合、プロジェクトの出力フォルダーをソリューションのデバッグまたはリリース フォルダー (1 レベル上) に変更しようとしていますが、プロジェクト設定で「出力ディレクトリ」を変更しても効果はありません。

.vcxproj ファイルにもこれらのマクロについての言及がないので、それらがどこで定義されているのか本当にわかりませんか? 私が最も興味を持っているのは、$(OutDir)ソリューションのデバッグ/リリース フォルダーに変更したいものです。これらがどこで定義されているか知っている人はいますか?

4

3 に答える 3

3

これらのマクロの大部分は、すべての VS2010 プロジェクトに含まれる MSBuild ターゲット ファイルで定義されています。プロジェクト ファイルのどこかに、おそらく一番下近くに、次のような行があります。

<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

パス変数のチェーンをたどると、最終的に を含むフォルダが見つかります。このフォルダには、次のMicrosoft.Cpp.targetsものが含まれます。

    <Import Project="Microsoft.Common.targets" />

このファイルには、次のメモがあります。

この .TARGETS ファイルを使用する前に、メイン プロジェクト ファイルでいくつかのプロパティを設定する必要があります。ただし、プロパティが設定されていない場合は、いくつかのデフォルトが選択されます。

OutDir: プロジェクトまたはソリューションの最終的な出力場所を示します。ソリューションを構築するとき、

MSBuild が選択する既定値は、$(OutDir)明示$(OutputPath)的に設定されていない場合の既定値です。$(OutputPath) プロジェクト ファイルで定義されているため、ターゲット ファイルが含まれる前にそのプロパティを変更すると、 の既定値が変更されます$(OutDir)$(OutDir)またはを使用してmsbuildコマンド ラインで値を指定することもできます。これ/p:OutDir=bin\DebugElsewhereにより、MSBuild が使用する既定値が上書きされます。(これは、たとえば、ソリューション内のすべてを同じフォルダーにダンプするために TFSBuild が行うことです。)

また、将来の参考のために、残りのマクロのほとんどもこのファイルで定義されています。

<PropertyGroup>
  <TargetDir Condition="'$(OutDir)' != ''">$([MSBuild]::Escape($([System.IO.Path]::GetFullPath(`$([System.IO.Path]::Combine(`$(MSBuildProjectDirectory)`, `$(OutDir)`))`))))</TargetDir>
  <TargetPath Condition=" '$(TargetPath)' == '' ">$(TargetDir)$(TargetFileName)</TargetPath>
  <ProjectDir Condition=" '$(ProjectDir)' == '' ">$(MSBuildProjectDirectory)\</ProjectDir>
  <ProjectPath Condition=" '$(ProjectPath)' == '' ">$(ProjectDir)$(ProjectFileName)</ProjectPath>
      .
      .
      .
</PropertyGroup>
于 2013-02-20T21:13:40.467 に答える