AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Batchfile im PostCompile wird zeilenweise ausgeführt?
Thema durchsuchen
Ansicht
Themen-Optionen

Batchfile im PostCompile wird zeilenweise ausgeführt?

Ein Thema von himitsu · begonnen am 2. Jul 2021 · letzter Beitrag vom 2. Jul 2021
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

Batchfile im PostCompile wird zeilenweise ausgeführt?

  Alt 2. Jul 2021, 09:53
Moin moin,

weiß jemand wie MSBUILD dabei arbeitet
oder besser noch ob VisualStudio auch soein Event hat und wie es dort reagiert?




In der DelphiIDE wird jeder Befehl jede Zeile einzeln ausgeführt, was OK wäre,
aber es bricht auch sofort ab, wenn in einer darin aufgerufenen Batch (BAT/CMD) der erste Befehl einen ErrorLevel<>0 liefert.
So Dinge wie IF ERRORLEVEL, FOR/IF mit ( ) , oder Makros (DOSKEY) sind dort nicht nutzbar.
Ein PAUSE oder TIMEOUT innerhalb der Batch hat auch keine Wirkung. (ich wollte im Taskmanager nachsehen was Delphi genau macht)

Es sieht aber fast so aus, als wenn Delphi nicht das Script ausführen lässt (von der CMD), sondern Dieses ebenfalls selbst zeilenweise abarbeitet.



Delphis InlineCompiler muß sich ja wie MSBUILD+DPROJ verhalten, drum wäre es gut zu wissen wie es bei MSBUILD/VisualStudio so aussieht,
denn wenn es dort auch so ist, wäre es wohl nicht sinnvoll das im Delphi-Inlinecompiler zu reparieren.



Ach ja, das "Bei Fehler abbrechen" zu deaktivieren ist auch keine Lösung.
Es soll ja bei einem Fehler abbrechen, aber soll hier eben bloß der ExitCode der Batch gelten.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Jul 2021 um 10:07 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Batchfile im PostCompile wird zeilenweise ausgeführt?

  Alt 2. Jul 2021, 11:51
"aber es bricht auch sofort ab," -> Wer jetzt? MSBUILD?

Ich finde es schwierig deinen Gedankengängen zu folgen und die konkrete Frage zu erkennen, aber das kann heute auch an mir liegen (Freitag, frühes Aufstehen etc.).

MSBuild wirfst du die DPROJ zum Fraß vor und rufst selbstverständlich vorher die jeweilige rsvars.bat aus dem Delphi-Bin-Verzeichnis.
Dann wird auf wundersame Art und Weise der jeweilige Compiler aufgerufen (dcc32, dcc64) und am Ende fällt ein Binary raus.

Beispiel:
Code:
MSBuild %1 /target:Build /p:DCC_BuildAllUnits=true /p:Config=%CONFIG% /p:Platform=%PLATFORM% /p:DCC_ExeOutput=%2 /p:PostBuildEvent= /p:PreBuildEvent= /p:DCC_DcuOutput="%TRASH%\DCU" /p:DCC_BplOutput="%TRASH%\BPL" /p:DCC_DCPOutput="%TRASH%\DCP" /p:DCC_ObjOutput="%TRASH%\OBJ" /p:DCC_HppOutput="%TRASH%\HPP" /p:DCC_UnitSearchPath=%UNIT_SEARCH_PATH% /p:DCC_RemoteDebug=false
Wobei hier %1% und %2% Übergabeparameter sind und der Rest in Prozentzeichen Umgebungsvariablen, die in den aufrufenden Skripten davor gesetzt werden.
%1% beinhaltet den Pfad zur DPROJ oder gar den Gruppenprojekt.

Geändert von TiGü ( 2. Jul 2021 um 11:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Batchfile im PostCompile wird zeilenweise ausgeführt?

  Alt 2. Jul 2021, 13:48
Zitat:
wer jetzt
im Inlinecompiler,

aber MSBUILD sollte sich ja hoffentlich genauso verhalten, wie der InlineCompiler ... hab's aber noch nicht fertig umgestellt.




Gedankengang:
Im PostBuild wird eine .CMD aufgerufen,
aber diese wird scheinbar vom Delphi zeilenweise ausgeführt, anstatt es die CMD.exe macht.

Das Script einzeln aufgerufen funktioniert, aber nicht wenn von Delphi über PostBuild gestartet.

bei
Code:
irgendeine.exe
if errorlevel 1 ...
, innerhalb der Batch (direkt im PostCompileScript geht es nicht, aber das ist OK so),
wird sofort bei der EXE abgebrochen, wenn ExitCode/ErrorLevel <> 0

oder Konstrukte wie
Code:
IF a == b (
   ...
)
funktionieren nicht


Zitat:
MSBuild wirfst du die DPROJ zum Fraß vor und rufst selbstverständlich vorher die jeweilige rsvars.bat aus dem Delphi-Bin-Verzeichnis.
Noch nicht, aber ist geplant.

Aktuell komiliert der FinalBuilder direkt die DPR/DPK,
aktuell wird die DRPOJ aktualisiert/umstukturiert und dann soll der FinalBuilder MSBUILD nutzen, anstatt seine eigene Delphi-BuildAction mit ihren eigenen/getrennten Settings.

Aber beim Anpassen der DPROJ ist z.B. dieses "Problem"? hier aufgefallen.
Drum mal die Frage, ob jemand PostCompile/PreCompile im MSBULD schonmal genutzt hat, bzw. ob wer weiß wie es bei anderen MSBUILD-nutzenden Programmen aussieht.

Falls hier wirklich die BATCH zeilenweise behandelt wird (was ich für ein böswilliges Fehlverhalten erachten würde),
aber falls auch MSBUILD und Andere das genauso handhaben, dann wäre es ja "nutzlos" jenen Fehler zu beheben (falls die Anderen das nicht ebenfalls reparieren würden).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Jul 2021 um 13:54 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:02 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