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>