如何使用msbuild在命令行上覆盖项目属性

时间:2017-02-07 13:55:01

标签: android c++ visual-studio msbuild

我正在尝试使用msbuild构建Visual Studio解决方案(C ++)

 msbuild.exe mysolution.sln /p:platform="ARM" /p:configuration="Release"

我收到此错误

error : all paths through this function will call itself [-Werror,-Winfinite-recursion]

我只是希望能够从命令行关闭-Werror,而不是在项目属性>中关闭它。配置属性> C / C ++>将警告视为错误

谢谢!

编辑1。 我还想设置其他项目属性,这些属性无法在代码中修复,例如配置属性>一般>平台工具集配置属性>一般>使用STL 。 FWIW,我可以从上面的命令行中看到ARM平台。

1 个答案:

答案 0 :(得分:0)

根据stijn提供的this post,我们无法直接通过MSBuild命令行更改“TreatWarningAsError”的值。因为“TreatWarningAsError”是项目文件中的ClCompile而不是PropertyGroup。 您可以添加目标调用MSBuild,以通过MSBuild命令行将外部参数传递到项目文件中:

首先,在项目文件中更改“TreatWarningAsError”的固定值:

<ClCompile>
   ...
   <TreatWarningAsError>$(TWAESettings)</TreatWarningAsError>
</ClCompile>

其次,将目标添加到项目文件中:

  <Target Name="TestBuild" Returns="@(ManagedTargetPath)">
    <MSBuild Projects="YourProjectName.vcxproj" Targets="NormalBuild" Properties="TWAESettings=true"/>
  </Target>

第三,使用MSBuild命令行,其属性为true或false:

msbuild /p:TWAESettings=false Or msbuild /p:TWAESettings=true

<强>更新

配置属性&gt;一般&gt;平台工具集和配置属性&gt;一般&gt;使用STL

您可以直接通过MSBuild命令行更改Platform Toolset:

msbuild /p:PlatformToolset=v140_xp

但我找不到“使用STL”,而只是“使用ATL”。如果“使用STL”是项目文件中的PropertyGroup,您也可以直接通过MSBuild命令行进行更改。