Einzelnen Beitrag anzeigen

casiosmu

Registriert seit: 7. Dez 2017
3 Beiträge
 
#1

MSBuild für mehrere Targets mit unterschiedlichen Defines

  Alt 20. Jul 2021, 11:52
Hallo,

ich teste gerade automatische Builds.
Dazu habe ich folgende Batch-Datei:
Code:
REM ### Aufruf: buildRelease.bat "PathOfDProjFile" "OutputPathOfBinary" [Release|Debug]
call "C:\Program Files (x86)\Embarcadero\Studio\19.0\bin\rsvars.bat"
msbuild "%1" /p:config=%3 /p:DCC_ExeOutput="%2"
In meiner Test-Projektdatei sind folgende 2 Build-Konfigurationen mit jeweils eigenen Defines/Bedingungen vorhanden:
- Debug: <DCC_Define>ISDEBUG;$(DCC_Define)</DCC_Define>
- Release: <DCC_Define>ISRELEASE;$(DCC_Define)</DCC_Define>

Im Code gebe ich zum Testen einfach unterschiedliche Texte aus mit {$IFDEF ISDEBUG} und {$IFDEF ISRELEASE}.

Wenn ich über Delphi kompiliere, passt auch alles wunderbar.
Wenn ich allerdings über das Script kompiliere, werden nur die Defines des in der Projektdatei gerade als 'aktiv' gesetzten Targets gesetzt, und nicht die des per /p:config gewählten.
D.h. wenn ich das Projekt in der IDE zuletzt als Debug erzeugt habe, wird bei kompilieren per msbuild anschließend immer ISDEBUG gesetzt, egal ob das Script mit Debug oder Release als Argument aufgerufen wurde.

Die restlichen Projekteinstellungen (Kompileroptionen,Pre-/Postbuild,..) werden korrekt von dem in /p:config gesetzten genommen.

In einem anderen Thread habe ich gesehen, dass man bei msbuild Defines mit /p: DCC_Define=... setzen/überschreiben kann. Ich würde allerdings bevorzugen, dass die bereits in der Projektdatei hinterlegten benutzt werden! (sonst muss ich ja alles doppelt hinterlegen...)

Wie kriege ich es also hin, dass msbuild auch die korrekten Defines aus dem Projekt nimmt?

Gruß,
Sebastian
  Mit Zitat antworten Zitat