msbuildを使用してvcbuild環境を設定します
-
05-07-2019 - |
質問
複数の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=""$(MYLIBDIR)""
/>
<VisualStudioPropertySheet/>
問題は、ビルド時に、msbuildファイル(MYBINDIR、MYLIBDIR)で宣言された環境変数の値がプロパティシートに反映されず、msbuildファイルのみにローカルであるように見える:msbuildプロジェクト内MYBINDIRは&quot; d:\ buildsysroot \ bin&quot;に展開されますが、vcプロジェクト内ではMYBINDIRは&quot; d:\ projects \ bin&quot;に展開されます。これはグローバルに設定した値です(例:MyComputer-&gt; Advanced-&gt; EnvironmentVariables)およびは、メイン開発環境のセットアップ方法であるため、そこにとどまる必要があります。
msbuildファイルで設定された環境をVCBuildタスクに渡すにはどうすればよいですか
この問題はバッチファイルを使用し、msbuildファイルではなく 'set'を使用してそこで環境を宣言することで解決できることを知っています。それは私がそれを行う方法でしたが、上記の方法は、1つの引数を指定したmsbuildへの1回の呼び出しであり、それだけです。
編集
すぐに解決策が必要になり、バッチファイルと同じ方法で環境を設定するカスタムタスクを思い付きましたが、msbuild内でそれを行うというボーナスがありました。タスクのExecute()メソッドは単にEnvironmentを実行します。 SetEnvironmentVariable(var、val)。 これには、プロセスの環境を設定する必要があります。別の方法があるかどうか聞いてうれしいです!
解決
他の誰も回答/コメントしていないので、私は自分の答えを使用します:Environment.SetEnvironmentVariable(var、val)を使用してプロセスの環境を設定するカスタムタスク
他のヒント
これがあなたがやろうとしていることになるかどうかはわかりません。しかし、「オーバーライド」を試してみましたか? VCBuildタスクの属性?使用方法は明白ではありません。しかし、VSに、気にした属性(OutputDirectoryおよびIntermediateDirectory)を使用して.vspropsを作成させました。次に、.vcprojファイルを編集して、追加したInheritedPropertySheets属性を削除しました。次に、MSBuildファイルのVCBuildタスクにOverride属性を追加しました。それは私が探していた行動を私に与えたようです。ただし、別の問題になる可能性があります...
ドニー