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