AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi MSBuild für mehrere Targets mit unterschiedlichen Defines

MSBuild für mehrere Targets mit unterschiedlichen Defines

Ein Thema von casiosmu · begonnen am 20. Jul 2021 · letzter Beitrag vom 29. Jul 2021
Antwort Antwort
Seite 1 von 2  1 2   
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
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#2

AW: MSBuild für mehrere Targets mit unterschiedlichen Defines

  Alt 20. Jul 2021, 14:07
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"
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#3

AW: MSBuild für mehrere Targets mit unterschiedlichen Defines

  Alt 20. Jul 2021, 14:24
Hier funktioniert es, wenn man die jeweilige Konfiguration in Anführungszeichen setzt:
Code:
/p:config="Release"
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.734 Beiträge
 
Delphi 2007 Professional
 
#4

AW: MSBuild für mehrere Targets mit unterschiedlichen Defines

  Alt 20. Jul 2021, 14:27
Kann auch sein dass du p:Configuration brauchst. (Je nach Delphi-Version und/oder ob du ein DProj oder GroupProj kompilierst.)
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.016 Beiträge
 
Delphi 12 Athens
 
#5

AW: MSBuild für mehrere Targets mit unterschiedlichen Defines

  Alt 20. Jul 2021, 14:54
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:
<PropertyGroup Condition="'$(Config)'=='Release'
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (20. Jul 2021 um 15:03 Uhr)
  Mit Zitat antworten Zitat
casiosmu

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

AW: MSBuild für mehrere Targets mit unterschiedlichen Defines

  Alt 20. Jul 2021, 18:34
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>
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.016 Beiträge
 
Delphi 12 Athens
 
#7

AW: MSBuild für mehrere Targets mit unterschiedlichen Defines

  Alt 21. Jul 2021, 00:09
Cfg_X sind keine Aliase.

Das sind einfch "Variablen", welche vorher gesetzt wurden,
wie z.B.
<Cfg_1>true</Cfg_1>
und dann nachfolgend
<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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (21. Jul 2021 um 00:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.449 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: MSBuild für mehrere Targets mit unterschiedlichen Defines

  Alt 21. Jul 2021, 11:52
p:Configuration werde ich bei nächster Gelegenheit mal probieren (verwende eine dproj, Delphi 10.2).
p:Configuration war nur bei Delhpi 2007. Alle neueren Versionen verwenden p:Config.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.016 Beiträge
 
Delphi 12 Athens
 
#9

AW: MSBuild für mehrere Targets mit unterschiedlichen Defines

  Alt 21. Jul 2021, 12:00
Bei 2006 nicht? (erstes Win32-Delphi mit der neuen IDE)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.449 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: MSBuild für mehrere Targets mit unterschiedlichen Defines

  Alt 21. Jul 2021, 12:27
Bei 2006 nicht? (erstes Win32-Delphi mit der neuen IDE)
Das erste Win32 Delphi mit der neuen IDE war Delphi 2005. Aber Delphi 2005 und 2006 verwendeten noch nicht msbuild und .dproj-Dateien sondern .bdsproj-Dateien in einem anderen Format.

Siehe Delphi Wiki
Thomas Mueller
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz