Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Reihenfolge Pre-Build-Script und brcc32 (https://www.delphipraxis.net/208128-reihenfolge-pre-build-script-und-brcc32.html)

Codehunter 15. Jun 2021 12:54

Reihenfolge Pre-Build-Script und brcc32
 
Hallo!

Ich habe folgendes Problem: In einer Batchdatei stelle ich diverse Dateien zusammen, die final per IZArc in eine ZIP gepackt werden. Diese Batchdatei habe ich in den Projektoptionen als Pre-Build-Befehl angegeben. Die ZIP-Datei, die von dieser Batch erzeugt wird, ist wiederum bei Resourcen und Bilder als RCDATA angegeben.

Dummerweise scheint es so als würde Delphi zuerst die Resourcen kompilieren die in der .dproj stehen und danach erst den Pre-Build-Befehl ausführen.

In der Konsequenz muss ich jedes Kompilieren doppelt ausführen, weil ja beim ersten Durchlauf noch eine veraltete ZIP-Datei einkompiliert und dann erst eine neue erstellt wird.

Lässt sich das irgendwie anders lösen? Außer das gesamte Projekt außerhalb der IDE per Batch zu kompilieren. Das wäre eher kontraproduktiv. Bei der Entwicklung nutze ich schon gern mal STRG-F9.

Grüße
Cody

himitsu 15. Jun 2021 13:59

AW: Reihenfolge Pre-Build-Script und brcc32
 
brcc32?
Kompilierst "du" nun die Ressource, oder lässt du es über {$R x.res x.rc} in der *.dpr kompilieren?

nur in *.RC (oder Projektopnen) angegeben und automatisch die *.RES erstellen lassen, ja das kommt vor dem BuildEvent.

Die *.RES aus einer *.RC selber erstellen ... Ressourcen werden erst nach dem Compilieren ins Compilat gelinkt. (sollte also so gehn)




Aber was wann, das kannst du selbst nachsehn.
* in der *.DRPOJ gibt es <IMPORTS> und darin steht was gemacht wird.
* so werden z.B. die $(BDS)\bin\CodeGear.Delphi.Targets und $(BDS)\bin\CodeGear.Common.Targets verwendet und darin findet man Folgendes:

Zitat:

<CoreBuildDependsOn>

_CheckBuildEnvironment;
_CheckPlatformVariable;
_CheckGetItPackageDependencies;
_CheckPlatformSDK;
CreateDirectories;
ResolveFiles;
BuildClassesDex;
BuildVersionResource;
BuildAndroidServiceJarFile;
BuildAndroidManifestList;
ResourceBuild;
$(_PreCompileTargets);
PreBuildEvent;
_PreOutputTimeStamp;
_RunUserTools;
RidlCompile;
_PasCoreCompile;
_PostOutputTimeStamp;
PostBuildEvent;
$(_PostCompileTargets);
_DeleteLnkFile;
<!-- GeniOSDevice32Outputs; -->
GenAndroid32Outputs

</CoreBuildDependsOn>
Achtung, beim Upgrade der DPROJ von einer alten Delphi-Version, kann bei den Imports was kaputt geh, bzw. alt bleiben,
da das mit dem automatischen ProjectUpgrade nicht wirklich richtig funktioniert.


Der Inline-Compiler könnte zwar bissl anders arbeiten, als MSBUILD, aber im Großen und Ganzen hoffe ich, der arbeitet genauso, wie es in der DPROJ definiert wurde.

Sinspin 15. Jun 2021 14:04

AW: Reihenfolge Pre-Build-Script und brcc32
 
Ich habe vor Jahren mal sowas änliches gemacht. Um mich nicht mit Ressourcen rumärgern zu müssen landete alles als const arrays in einer unit.

Codehunter 17. Jun 2021 08:34

AW: Reihenfolge Pre-Build-Script und brcc32
 
Ich lasse kompilieren. Zwar hatte ich auch schon darüber nachgedacht, einen entsprechenden Eintrag in meiner Batch zu ergänzen, aber am Problem würde das nichts ändern. Wie gesagt, im Moment sähe ich nur die Möglichkeit, auf das Kompilieren in der IDE komplett zu verzichten und alles per Batch zu machen. Aber das wäre bei der Fehlersuche schon ziemlich ätzend.

Kurz gesagt irritiert mich die Bezeichnung "Pre-Build-Ereignis" in den Projektoptionen. Denn defakto ist das nicht "Pre-Build" sondern irgendwo mittendrin, zwischen dem Kompilieren der Ressourcen und dem Kompilieren der Quellen. Ist das ein Bug in der IDE? War das schon immer so? Oder mache ich nur einen Denkfehler?

himitsu 17. Jun 2021 11:25

AW: Reihenfolge Pre-Build-Script und brcc32
 
Gut, hier lasse ich die Ressourcen vom FinalBuilder generieren.
* die .RC mit der VersionsInfo bzw. Manifest aus je einer Vorlage, mit ersetzten Variablen/Platzhaltern
* eine .INC mit Konstanten (Versionsinfo, Name+CommitID+Datum der verwendeten GitBranches)
* das wird direkt zu einer .RES kompiliert, bevor das eigentliche Kompilieren der Delphi-Projekte startet
* und das Gemeinsame muß hier auch vorkompiliert werden, da anschließend ein großer Teil der DPROJ (DPR/DPK) multithreaded gleichzeitig kompiliert wird

sieht dann in etwa so aus:
Code:
"C:\Program Files (x86)\Embarcadero\Studio\*****\bin\rsvars.bat
"%BDS%\bin\rc.exe" -fo"S:\*****\VersionInfoEXE.res" S:\*****\VersionInfo.rc
"%BDS%\bin\rc.exe" -fo"S:\*****\VersionInfoSRV.res" /d _SRV S:\*****\VersionInfo.rc
"%BDS%\bin\rc.exe" -fo"S:\*****\VersionInfoDLL.res" /d _DLL S:\*****\VersionInfo.rc
"%BDS%\bin\rc.exe" -fo"S:\*****\VersionInfoBPL.res" /d _BPL S:\*****\VersionInfo.rc
"%BDS%\bin\dcc32.exe" ....
...
Wie wäre es also mit sowas, bei dir?
Code:
machwas.exe "$(INPUTDIR)\XYZ.rc"
"$(BDS)\bin\rc.exe" -fo"$(INPUTDIR)\XYZ.res" "$(INPUTDIR)\XYZ.rc"

Ob mit brcc32.exe oder rc.exe ist Geschmackssache.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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