如何有条件地在构建中包含文件?

时间:2016-10-05 14:45:18

标签: windows visual-studio xsd msbuild

MSBuild有ExcludedFromBuild根据条件排除文件。我想要相反的模式 - 我想根据条件包含一个文件。

看来我无法向ItemGroup添加条件,这是包含节点源文件。另见Why the Condition attribute doesn't work for the ItemGroup element?所以这样的事情不起作用:

<ItemGroup Condition="'$(Platform)'=='x64'">
  <ClCompile Include="x64.cpp" />
</ItemGroup>

如何在build中有条件地包含文件?

更改的原因是我们正在为ARM添加更好的支持。我们认为可以通过添加像X86和X64这样的ARM部分重新使用项目文件:

<!-- X86 Configurations -->
<ItemDefinitionGroup Condition="'$(Platform)'=='Win32'" Label="X86 Configuration">
  <ClCompile>
    <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
  </ClCompile>
  <Link>
    <TargetMachine>MachineX86</TargetMachine>
  </Link>
</ItemDefinitionGroup>

<!-- X64 Configurations -->
<ItemDefinitionGroup Condition="'$(Platform)'=='x64'" Label="X64 Configuration">
  <ClCompile>
    <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
  </ClCompile>
  <Link>
    <TargetMachine>MachineX64</TargetMachine>
  </Link>
</ItemDefinitionGroup>

但是,我们有这个不可扩展的疣代码,我觉得应该在x64平台(白名单)上重写 include ,而不是排除在非x64平台上(黑名单)。它显然会在ARM上破解,如果微软支持物联网的MIPS,它将再次破裂。

<CustomBuild Include="x64masm.asm">
  <Message>Building and Assembling x64masm.asm</Message>    
  <ExcludedFromBuild Condition="'$(Platform)'=='Win32'">true</ExcludedFromBuild>
  <Command>ml64.exe /c /nologo /D_M_X64 /W3 /Fo"$(IntDir)x64masm.obj" /Zi "%(FullPath)"</Command>
  <Outputs>$(IntDir)x64masm.obj;%(Outputs)</Outputs>
</CustomBuild>

0 个答案:

没有答案