Festlegen von PreProcessorDefinitions als Aufgabenpropery für die Msbuild-Aufgabe

7

Das Folgende stammt aus einem regulären VS2010 C ++ - Projekt.

%Vor%

Wenn ich PreprocessorDefinitions bearbeite, kann ich eine Definition festlegen, die vom Präprozessor verwendet wird. Ich kann das in meinem Code sehen über #ifdef etc.

Wenn ich jedoch folgendes benutze:

%Vor%

Ich kann auch über die Nachricht sehen, dass PreprocessorDefinitions den Wert enthält, den ich über Properties="PreprocessorDefinitions=THISGETSSETBUTDOESNOTHING" gesetzt habe, aber ich kann meinen Build nicht mit #ifdef usw. steuern. Wenn ich ein reguläres Setup verwende und versuche, PreprocessorDefinitions mit <Message Text="PreprocessorDefinitions: $(PreprocessorDefinitions)" auszugeben, ist das Feld eigentlich leer und enthält nicht das erwartete <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> , obwohl ich einen dieser Schlüssel verwenden kann, um mein Build mit #ifdef usw. zu steuern.

  1. Warum ist das so?
  2. Was kann ich tun, um PreprocessorDefinitions für ein VS2010 C ++ Projekt über die Aufgaben Properties element?
  3. zu übergeben?
Johannes 28.02.2013, 17:05
quelle

2 Antworten

6

Sie können dies nicht tun, ohne demo.vcxproj zu ändern, da Sie Zugriff auf PreprocessorDefinitions von CLCompile benötigen, was kein PropertyGroup ist und daher nicht über die MSBuild-Befehlszeile übergeben werden kann.

Sie können die Präprozessor-Definitionen in der GUI über Projekteigenschaften - & gt; Konfigurationseigenschaft - & gt; C / C ++ - & gt; Präprozessor oder bearbeiten Sie das XML direkt:

%Vor%

In Ihrem MSBuild-Projekt:

%Vor%

Dies entspricht der Ausführung von MSBuild.exe als:

%Vor%     
Kevin Richardson 28.02.2013, 17:25
quelle
30

Dies kann durchgeführt werden, ohne das ursprüngliche Projekt zu ändern: Das erste, was in Microsoft.Cpp.Targets gemacht wird, ist normalerweise eines der letzten Dinge, die in ein normales C ++ Projekt importiert werden. Überprüfen Sie, ob es eine Eigenschaft namens ForceImportBeforeCppTargets und if gibt Also, importiere es.

Nehmen wir an, Sie möchten ADDITIONAL zu den Präprozessordefinitionen hinzufügen, indem Sie eine Datei 'override.props' erstellen (für die vollständige Automatisierung verwenden Sie die WritelinesToFile Aufgabe, um die Datei zu erstellen):

%Vor%

Und ruf

an %Vor%

oder über die Befehlszeile, die

wäre %Vor%

Hinweis wie richb im Kommentar darauf hinweist, funktioniert das obige nur, wenn override.props von den Nachschlage-Regeln von Msbuild gefunden werden kann. Um sicherzustellen, dass es immer gefunden wird, geben Sie einfach den vollständigen Pfad an.

    
stijn 03.07.2013 11:22
quelle

Tags und Links