2017-02-07 7 views
0

Ich versuche, eine Visual Studio-Lösung (C++) außer Kraft setzen zu bauen mit msbuildWie Projekteigenschaften auf der Kommandozeile mit msbuild

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

Ich erhalte diesen Fehler

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

I Sie möchten nur den Befehl -Werror über die Befehlszeile ausschalten können, anstatt ihn in zu deaktivieren. Projekteigenschaften> Konfigurationseigenschaften> C/C++> Warnungen als Fehler behandeln

Danke!

Bearbeiten 1. Es gibt auch andere Projekteigenschaften, die Ich mag würde diese Option setzen kann nicht im Code festgelegt werden, wie Konfigurationseigenschaften> Allgemein> Platform Toolset und Konfigurationseigenschaften> Allgemein> Benutzung der STL. FWIW, ich ziele auf die ARM-Plattform, wie Sie von meiner Kommandozeile oben sehen können.

+4

Wie sieht es stattdessen mit der Funktion aus? – SingerOfTheFall

+0

Guter Vorschlag, aber er Funktion ist in einer externen Bibliothek, die ich nicht ändern kann. – Martin

+0

Mögliches Duplikat von [Festlegen von PreProcessorDefinitions als Aufgabenpropery für die Msbuild-Task] (http://stackoverflow.com/questions/15141429/how-to-set-preprocessordefinitions-as-a-task-propery-for-the -msbuild-Aufgabe); Diese Frage bezieht sich auf Präprozessor-Definitionen anstelle von "Warnungen als Fehler behandeln", aber das Prinzip ist genau dasselbe. – stijn

Antwort

0

Nach this post, die auch von Stijn zur Verfügung gestellt werden, konnten wir den Wert von "TreatWarningAsError" nicht direkt von der MSBuild-Befehlszeile ändern. Weil der "TreatWarningAsError" eine ClCompile nicht PropertyGroup in der Projektdatei ist. Sie können ein Ziel hinzufügen invoke MSBuild einen externen Parameter in der Projektdatei von MSBuild-Befehlszeile zu übergeben:

Erstens ändern sich die festen Werte von „TreatWarningAsError“ in der Projektdatei:

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

Zweitens, ein Ziel in dem Projekt-Datei hinzufügen:

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

Drittens die Befehlszeile MSBuild verwenden, um mit den Eigenschaften wahr oder falsch:

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

Update:

Für Konfigurationseigenschaften> Allgemein> Platform Toolset und Konfigurationseigenschaften> Allgemein> Verwendung von STL

Sie können durch die MSBuild-Befehlszeile direkt auf die Plattform Toolset ändern:

Aber ich konnte nicht "Verwendung von STL", nur "Verwendung von ATL" stattdessen finden. Wenn "Verwendung von STL" eine PropertyGroup in der Projektdatei ist, können Sie sie auch direkt über die MSBuild-Befehlszeile ändern.

Verwandte Themen