0

複数の C++ プロジェクト (*.vcproj) のビルドに使用される msbuild プロジェクト ファイルがあります。以下は典型的なプロジェクト ファイルの一部で、ビルドのグローバル環境変数がプロパティとしてオーバーライドされます。

<PropertyGroup>
  <MYBINDIR>d:\buildsysroot\bin</MYBINDIR>
  <MYLIBDIR>d:\buildsysroot\lib</MYLIBDIR>
  ...
</PrpertyGroup>

<ItemGroup>
  <MyItems Include="d:\buildsysroot\myproject\myproject.vcproj"/>
</ItemGroup>

<Target Name="Release_x64">
  <VCBuild Projects="@(MyItems)" Configuration="Release_dll|x64"/>
</Target>

これらの環境変数は、プロパティ シートを通じて、すべての vcproj ファイルで使用されます。vcproj の抜粋を次に示します。

<Configuration
  Name="Release_dll|x64"
  ConfigurationType="1"
  InheritedPropertySheets="$(BUILDPROPSDIR)\defaults.vsprops;$(BUILDPROPSDIR)\build_dll.vsprops"
>

プロパティ シートは次のようになります。

<VisualStudioPropertySheet
  Name="defaults"
  OutputDirectory="$(MYBINDIR)\_$(ConfigurationName)_$(PlatformName)"
  IntermediateDirectory="$(MYBUILDDIR)_$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
  >
  <Tool
    Name="VCLinkerTool"
    AdditionalLibraryDirectories="&quot;$(MYLIBDIR)&quot;"
  />
<VisualStudioPropertySheet/>

問題は、ビルド時に、msbuild ファイル (MYBINDIR、MYLIBDIR) で宣言された環境変数の値がプロパティ シートに反映されず、msbuild ファイルに対してのみローカルであるように見えることです。msbuild プロジェクト内で MYBINDIR が展開されます。 "d:\buildsysroot\bin" ですが、VC プロジェクト内は MYBINDIR は "d:\projects\bin" に展開されます。それは、私のメインの開発環境がどのようにセットアップされているかによるものです。

msbuild ファイルに設定された環境を VCBuild タスクに渡すにはどうすればよいですか?

この問題は、msbuild ファイルではなく、バッチ ファイルを使用し、「set」を使用してそこで環境を宣言することで解決できることを知っています。それが私がそれを行っていた方法ですが、1つの引数を持つmsbuildへの1回の呼び出しであり、それだけであるため、上記の方法を好みます。

編集

私はすぐに解決策を必要とし、バッチ ファイルと同じ方法で環境を設定するカスタム タスクを思いつきましたが、msbuild 内でそれを行うという利点があります。タスクの Execute() メソッドは単に Environment.SetEnvironmentVariable( var 、 val )。これにはまだプロセスの環境を設定する必要があります。別の方法があれば教えていただければ幸いです。

4

2 に答える 2

0

これがあなたがやろうとしていることになるかどうかはわかりません。しかし、VCBuild タスクで「オーバーライド」属性を試しましたか? それを使用する方法は明白ではありません。しかし、気になる属性 (OutputDirectory と IntermediateDirectory) を使用して、VS に .vsprops を作成してもらいました。次に、.vcproj ファイルを編集して、追加した InheritedPropertySheets 属性を削除しました。次に、MSBuild ファイルの VCBuild タスクに Override 属性を追加しました。それは私が探していた行動を私に与えたようです。違う問題かもしれませんが…

ドニー

于 2009-12-09T22:15:41.897 に答える
0

誰も答えたりコメントしたりしていないので、私は自分の答えに行きます: Environment.SetEnvironmentVariable( var, val ) を使用してプロセスの環境を設定するカスタムタスク

于 2009-12-01T20:17:22.227 に答える