![]() |
MSBuild für mehrere Targets mit unterschiedlichen Defines
Hallo,
ich teste gerade automatische Builds. Dazu habe ich folgende Batch-Datei:
Code:
In meiner Test-Projektdatei sind folgende 2 Build-Konfigurationen mit jeweils eigenen Defines/Bedingungen vorhanden:
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" - 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 |
AW: MSBuild für mehrere Targets mit unterschiedlichen Defines
Bin gerade zwischen Tür und Angeln und um das auszuprobieren fehlt gerade die Zeit.
Probier das mal mit CaseSensitive. Also "Config=Release" oder "Config=Debug" bzw. "PLATFORM=Win32" |
AW: MSBuild für mehrere Targets mit unterschiedlichen Defines
Hier funktioniert es, wenn man die jeweilige Konfiguration in Anführungszeichen setzt:
Code:
/p:config="Release"
|
AW: MSBuild für mehrere Targets mit unterschiedlichen Defines
Kann auch sein dass du p:Configuration brauchst. (Je nach Delphi-Version und/oder ob du ein DProj oder GroupProj kompilierst.)
|
AW: MSBuild für mehrere Targets mit unterschiedlichen Defines
Die " sind nur nötig, wenn z.B. Leerzeichen enthalten sind.
Aber das CaseSensitiv ist hier wohl das Entscheidende. Und falls sonst nichts hilft, dann schau mal nach allen <DCC_Define> und den <PropertyGroup Condition=...> drumrum. Gibt es da noch etwas Anderes, was nach dem Gewünschten das nochmal überschreibt? Ob Config oder Configuration siehst auch in der *PROJ Zitat:
|
AW: MSBuild für mehrere Targets mit unterschiedlichen Defines
Ok, CaseSensitiv habe ich beachtet, Leerzeichen gibt es keine.
p:Configuration werde ich bei nächster Gelegenheit mal probieren (verwende eine dproj, Delphi 10.2). Delphi erzeugt in der .dproj-Datei irgendwie automatisch 'Cfg_X'-Aliase (hier gekürzt):
Code:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <ProjectGuid>...</ProjectGuid> <MainSource>...</MainSource> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Base>True</Base> <Config Condition="'$(Config)'==''">Debug</Config> <Platform Condition="'$(Platform)'==''">Win64</Platform> <TargetedPlatforms>3</TargetedPlatforms> <AppType>Application</AppType> </PropertyGroup> <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> <Base>true</Base> </PropertyGroup> <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''"> <Base_Win32>true</Base_Win32> <CfgParent>Base</CfgParent> <Base>true</Base> </PropertyGroup> <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''"> <Base_Win64>true</Base_Win64> <CfgParent>Base</CfgParent> <Base>true</Base> </PropertyGroup> <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''"> <Cfg_1>true</Cfg_1> <CfgParent>Base</CfgParent> <Base>true</Base> </PropertyGroup> <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''"> <Cfg_1_Win32>true</Cfg_1_Win32> <CfgParent>Cfg_1</CfgParent> <Cfg_1>true</Cfg_1> <Base>true</Base> </PropertyGroup> <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win64)'!=''"> <Cfg_1_Win64>true</Cfg_1_Win64> <CfgParent>Cfg_1</CfgParent> <Cfg_1>true</Cfg_1> <Base>true</Base> </PropertyGroup> <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''"> <Cfg_2>true</Cfg_2> <CfgParent>Base</CfgParent> <Base>true</Base> </PropertyGroup> <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''"> <Cfg_2_Win32>true</Cfg_2_Win32> <CfgParent>Cfg_2</CfgParent> <Cfg_2>true</Cfg_2> <Base>true</Base> </PropertyGroup> <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win64)'!=''"> <Cfg_2_Win64>true</Cfg_2_Win64> <CfgParent>Cfg_2</CfgParent> <Cfg_2>true</Cfg_2> <Base>true</Base> </PropertyGroup> <PropertyGroup Condition="'$(Base)'!=''"> <DCC_Define>_WINDOWS_;$(DCC_Define)</DCC_Define> </PropertyGroup> <PropertyGroup Condition="'$(Cfg_1)'!=''"> <DCC_Define>RELEASE;$(DCC_Define)</DCC_Define> </PropertyGroup> <PropertyGroup Condition="'$(Cfg_2)'!=''"> <DCC_Define>DEBUG;$(DCC_Define)</DCC_Define> </PropertyGroup> </Project> |
AW: MSBuild für mehrere Targets mit unterschiedlichen Defines
Cfg_X sind keine Aliase.
Das sind einfch "Variablen", welche vorher gesetzt wurden, wie z.B.
SQL-Code:
<Cfg_1>true</Cfg_1>
und dann nachfolgend
SQL-Code:
<PropertyGroup Condition="'... or '$(Cfg_1)'!='true'">
Cfg_1 und Cfg_2 sind "standardmäßig" die Configs "Release" und "Debug", aber merke dir nicht was was ist, da Delphi das schon öfters mal getauscht hat (was zuerst angelegt wurde). Das sind quasi die internen "durchnummeierten" Konfigurationen von der Projektverwaltung. Die Parameter wie "Config" und "Platform" werden genommen, um eine der "Konfigurationen" auszuwählen, dann wird damit Konfiguration und deren übergeordnete "Parent"-Konfigurationen "aktiviert", also deren Variablen z.B. auf True gesetzt, um anschließend mit diesen Variablen die eigentlichen Settings und Aktionen zu laden. |
AW: MSBuild für mehrere Targets mit unterschiedlichen Defines
Zitat:
|
AW: MSBuild für mehrere Targets mit unterschiedlichen Defines
Bei 2006 nicht? (erstes Win32-Delphi mit der neuen IDE)
|
AW: MSBuild für mehrere Targets mit unterschiedlichen Defines
Zitat:
Siehe ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz