Entwickler-Ecke
Open Source Projekte - Delphi Batch Compiler 2.0
jaenicke - Mi 11.05.05 15:56
Titel: Delphi Batch Compiler 2.0
Hallo!
Es gibt eine neue Version. Ich habe auch den Eröffnungspost komplett überarbeitet.
Screenshot:
Download:
Neue Version 2.0 (zip, 154.15 KB)
Ich hab mich immer geärgert, dass ich in den Batch-Dateien, die meine größeren Projekte automatisch in wenigen Minuten erstellen immer die Pfade zu den ganzen Komponenten angegeben werden mussten, weil sich der Kommandozeilencompiler von Delphi diese nicht aus der Registry holt. Bei neuen Delphiversionen gibt es zwar via msbuild Kommandozeilenmöglichkeiten, aber da meine Open Source Projekte z.B. automatisiert mit verschiedenen auch älteren Delphiversionen getestet werden, ist es praktischer einen Aufruf für alle Versionen zu haben.
Das Programm funktioniert mit dem Win32-Compiler von Delphi 2.0 bis XE2.
Das Projekt steht unter den Bedingungen der GPL zur Verfügung, diese ist als Lizenz auch beigefügt.
Mögliche Parameter:
Quelltext
1: 2: 3: 4:
| -ver 2,3,4,5,6,7,2005,2006,2007,2009,2010,XE,XE2,highest // Compilerversion bestimmen (bei mehreren Delphiversionen an Bord) -directives DEBUG;NOERROR // Compilerdirektiven angeben -p MyProject.dpr // Projekt angeben -debug // nach dem Kompilieren anhalten um die Ausgabe zu sehen |
Viel Spaß damit,
Sebastian
Necaremus - Mi 25.08.10 14:47
eine kleine Frage hätte ich:
welche Optionen kann ich alle per -o alle angeben? X_x
kenn mich leider mit dem net so gut aus^^
Necaremus - Do 16.09.10 16:49
kleiner bug: dein prog kommt nicht mit leerzeichen im pfad zurecht...
du progst nicht zufällig für oracle? :P
jaenicke - Sa 18.09.10 07:56
Das Problem sind nicht direkt die Leerzeichen, sondern dass ich seinerzeit die Suchpfade nicht ordentlich genug untersucht habe. Dadurch kommen dann Anführungszeichen ohne entsprechend beginnende und leere Anführungszeichen und so was hinein.
Heißt: Wenn ich das heute geschrieben hätte, wäre mir sowas nicht passiert. :D
Genauer schaue ich mir das dann nachher nach den Delphi-Tagen an. ;-)
jaenicke - Mo 20.09.10 06:23
Kurze Ankündigung: Aus dem alten Code lässt sich nicht viel machen (sprich: war schlecht geschrieben), er ruhe in Frieden. :D
Ich schreibe eine neue objektorientierte Version, bin da auch schon fast fertig. Ich denke die wird es morgen Abend dann geben. Außerdem unterstützt die dann auch alle Versionen von Delphi und unterstützt Live-Ausgaben beim Kompilierprozess.
Necaremus - Mo 20.09.10 09:26
wäre echt super, freu mich schon :D
jaenicke - Mi 22.09.10 06:24
Ich hänge mal eine kleine Vorschauversion an, die kann noch nicht viel, sollte aber korrekt mit den Pfaden umgehen. Das muss ich noch richtig überprüfen.
Bis jetzt kennt die Version nur zwei Parameter und deren Implementierung ist noch provisorisch, damit ich es hier erst einmal reinstellen kann. Beispiel:
Quelltext
1:
| -p "xy\xyz.dpr" -ver 2006 |
Die Projektdatei und die Compilerversion müssen im Moment noch immer angegeben werden.
In den nächsten Tagen implementiere ich auch noch die restlichen Sachen.
Necaremus - Di 28.09.10 09:45
kannst du dem ding auch ne log funktion einbauen? wäre echt hilfreich^^
des weiteren: irgendwie klappt das bei mir nicht.
wenn ich das mit
compileprojekt.exe -p "x\y\z.dpg" -ver 7 aufrufe, kommt bei mir dauernd:
Zitat: |
z.bpg(N) Fehler: Ungültiges Zeichen in Eingabedatei: '\' ($5C) |
0<N<106
wobei N doppelt vorkommen kann und die fehlermeldung ab und an leicht abweicht (daher wäre nen log vlt sinnvoll^^)
liegt es daran, dass es ein .dpg statt .dpr file ist? oder liegt es an -ver 7? oo"
jaenicke - Di 28.09.10 10:11
Ich habe keine Ahnung ob man Projektgruppen so an den Compiler übergeben kann...
Hast du den Aufruf denn schon einmal manuell versucht?
Wegen einem Log: Es sollten alle Compilerausgaben 1:1 ausgegeben werden.
Necaremus - Di 28.09.10 10:51
ah sry, ich meinte mit log, dass er das alles direkt in ne datei abspeichert.
find sowas sehr handlich :)
und öhm - hab es über ne batch datei gestartet. allerdings habe ich eine kleine frage (teste die gleichmal) reicht es wenn ich meinen ordner nach allen .dpr files durchsuche und dann für jede 1x dein programm starte? hab nicht sooo viel ahnung hinter den wirklichen mechanismen dahinter, da ich ja noch relativ neu beim proggen bin und kaum mit delphi (wobei der mechanismus an sich sich nicht großartig zu c# unterscheidet wird, oder?^^), daher sry, wenn ich "doofe" fragen stelle :o
habe gerade herausgefunden, dass die probs, die ich mit dem prog bisher hatte hauptsächlich an mir lagen (die projekte brauchen vorinstallierte komponenten bei delphi ohne die der compileprojekt.exe bzw delphi selbst die src nicht richtig darstellen kann (diese tnt controls)
bei nem neuen projekt funktioniert das ding ohne probs^^
ich bräuchte daher eigentlich nur noch eine funktion wie -d "path"(d für destination), damit ich die dest selbst angeben kann
/edit: perfekt wäre natürlich wann man dem ding auch .dpg übergeben könnte ;)
Dude566 - Di 28.09.10 11:28
Hallo
jaenicke, du hattest mal in einem Thread (finde ihn gerade nicht) erwähnt, dass du Scripte verwendest um die unnötigen Delphi Dateien aus dem Projektordner vor der Veröffentlichung zu löschen. Wäre schon wenn du diese(s) mal veröffentlichen könntest, ist nervig immer alles einzeln rauszusuchen.
jaenicke - Di 28.09.10 19:14
Ja, wenn ich dann dazu komme...
Ich habe ja ein kleines Build-Management-System erstellt, das auch Plugins für das Hochladen auf meine Homepage, ins Forum usw. beinhaltet. Das ganze ist aber zu stark auf mich angepasst, sonst hätte ich das längst veröffentlicht.
Das genannte Skript ist aber sehr kurz und hatte ich
auch schon gepostet [
http://www.delphi-forum.de/viewtopic.php?p=608471#608471]. Das ist aber wirklich zum Säubern vor der Veröffentlichung gedacht, die History sollte normalerweise ja nicht unbedingt weg. ;-)
Zurück zum Thema:
Ich schau mit das mit den .dpg Dateien usw. einmal an... Bin ja eh noch nicht fertig mit dem Tool...
trm - Sa 20.11.10 04:15
Huhu,
kurz eine Frage zum zip-Archiv.
Da sind 2x die gleichen Dateinamen enthalten.
Unter Windows wird dadurch einmal eine beim entpacken (nicht) ersetzt.
Warum machst Du so was?
jaenicke - Sa 20.11.10 10:22
Hmm, stimmt. :gruebel:
Ja, was hatte ich gemacht? Ich hatte die neue Version der Exe einfach auf das alte Zip gezogen. Normalerweise wird die dann ja ersetzt...
Ich setze mich mal an die neue Version nochmal und poste dann gleich die.
trm - Sa 20.11.10 12:41
Huhu :)
Nur nochmal der Interesse halber.
Unter welchem Betriebssystem und mit welchem Packprogramm hast Du das Archiv "re-gepackt", so dass 2 gleiche Dateinamen drin waren?
jaenicke - Mo 22.11.10 02:54
Das war vermutlich 7-Zip oder ZipGenius, keine Ahnung, ist 5 Jahre her. ;-)
Es gibt eine neue Version (erst einmal zusätzlich). Diese kompiliert bisher ausschließlich Delphiprojekte. Das ganze ist jetzt in eine Klasse gekapselt, damit sich das auch als Unit einbinden lässt, falls gewünscht.
Zudem erkennt das Tool jetzt, ob ein Fehler aufgetreten ist. Das wird bisher nicht weiter analysiert, aber entsprechende Sachen wie ExitCode für die %ERRORLEVEL% Abfrage usw. kommt alles noch.
Necaremus - Mo 22.11.10 07:11
wegen dpg: ich hab es etwas unschön gelöst bei mir, aber vlt hilft es dir trotzdem:
ist allerdings c#, hoffe stört nicht weiter :)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| private FileInfo[] GetFiles() { content = GetContent(bpg); return GetFiles(content); } private FileInfo[] GetFiles(string content) { List<FileInfo> files = new List<FileInfo>(); string[] s1 = content.Split(new string[] { "$(DCC)" }, StringSplitOptions.RemoveEmptyEntries); foreach (string s in s1) { string[] s2 = s.Split(new string[] { ".dll: " }, StringSplitOptions.RemoveEmptyEntries); string file = ""; if (s2.Length == 2) file = s2[1].Replace("..\\", config.BufferPath + "\\" + config.ProjectRep + "\\").Trim(); else { s2 = s.Split(new string[] { ".exe: " }, StringSplitOptions.RemoveEmptyEntries); if (s2.Length == 2) file = s2[1].Replace("..\\", config.BufferPath + "\\" + config.ProjectRep + "\\").Trim(); } if (!String.IsNullOrEmpty(file)) files.Add(new FileInfo(file)); }
return files.ToArray(); }
private string GetContent(FileInfo bpg) { string content = ""; using (StreamReader reader = new StreamReader(bpg.FullName)) { content = reader.ReadToEnd(); } return content; } |
trm - So 08.05.11 18:28
Hi Sebastian,
bei mir ergibt ein Versuch einen Fehler:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57:
| D:\[..gekürzt..]\compileproject.exe -p Project1.dpr
******************************************************************************** * * * * * * * * * Delphi Batch Compiler * * * * * * * * * * * * * * * * * * 2.0 * * * * * * * * * * * * * * * * Copyright (c) 2005 - 2010 by Sebastian Jänicke * * * * * * * ********************************************************************************
Compiling: D:\[..gekürzt..]\Project1.dpr
Delphi version specified: Delphi XE2
Delphi version specified: Delphi XE
Delphi version specified: Delphi 2010
Delphi version specified: Delphi 2009
Delphi version specified: Delphi 2007
Delphi version specified: Delphi 2006
Delphi version specified: Delphi 2005
Delphi version specified: Delphi 8
Delphi version specified: Delphi 7
No Delphi version specified, found as highest version: Delphi 7
Borland Delphi Version 15.0 Copyright (c) 1983,2002 Borland Software Corporation Unit1.pas(13179) Fehler: Undefinierter Bezeichner: 'UseCustomBinCode' Unit1.pas(13184) Fehler: Undefinierter Bezeichner: 'UseCustomBinCode' Unit1.pas(13189) Fehler: Undefinierter Bezeichner: 'UseCustomBinCode' Unit1.pas(13254) Fehler: Undefinierter Bezeichner: 'UseCustomBinCode' Unit1.pas(13255) Fehler: Undefinierter Bezeichner: 'CustomBinCode' Unit1.pas(13256) Fehler: Undefinierter Bezeichner: 'UseCustomPaperCode'Unit1.pas (13257) Fehler: Undefinierter Bezeichner: 'CustomPaperCode' Unit1.pas(13320) Fehler: Undefinierter Bezeichner: 'UseCustomBinCode' Unit1.pas(13321) Fehler: Undefinierter Bezeichner: 'CustomBinCode' Unit1.pas(13325) Fehler: Undefinierter Bezeichner: 'UseCustomPaperCode' Unit1.pas(13326) Fehler: Undefinierter Bezeichner: 'CustomPaperCode' Project1.dpr(13) Fatal: Verwendete Unit 'Unit1.pas' kann nicht compiliert werden
Build was not successful |
Die Fehler sind Quickreport-spezifisch. Ich habe Quickreport im Suchpfad, das habe ich geprüft.
Was kann ich tun?
jaenicke - So 08.05.11 18:41
Ich habe die neue Version nie ohne Versionsangabe für den Compiler getestet. Gib einfach die Version explizit an. :-)
Quelltext
1:
| compileproject.exe -ver 7 -p Project1.dpr |
trm - So 08.05.11 19:02
Es geht nicht darum, sondern um die Meldungen weiter unten:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| D:\[..]>compileproject.exe -ver 7 -p Project1.dpr
******************************************************************************** * * * * * * * * * Delphi Batch Compiler * * * * * * * * * * * * * * * * * * 2.0 * * * * * * * * * * * * * * * * Copyright (c) 2005 - 2010 by Sebastian Jänicke * * * * * * * ********************************************************************************
Compiling: D:\[..]\Project1.dpr
Delphi version specified: Delphi 7
Borland Delphi Version 15.0 Copyright (c) 1983,2002 Borland Software Corporation Unit1.pas(13179) Fehler: Undefinierter Bezeichner: 'UseCustomBinCode' Unit1.pas(13184) Fehler: Undefinierter Bezeichner: 'UseCustomBinCode' Unit1.pas(13189) Fehler: Undefinierter Bezeichner: 'UseCustomBinCode' Unit1.pas(13254) Fehler: Undefinierter Bezeichner: 'UseCustomBinCode' Unit1.pas(13255) Fehler: Undefinierter Bezeichner: 'CustomBinCode' Unit1.pas(13256) Fehler: Undefinierter Bezeichner: 'UseCustomPaperCode'Unit1.pas (13257) Fehler: Undefinierter Bezeichner: 'CustomPaperCode' Unit1.pas(13320) Fehler: Undefinierter Bezeichner: 'UseCustomBinCode' Unit1.pas(13321) Fehler: Undefinierter Bezeichner: 'CustomBinCode' Unit1.pas(13325) Fehler: Undefinierter Bezeichner: 'UseCustomPaperCode' Unit1.pas(13326) Fehler: Undefinierter Bezeichner: 'CustomPaperCode' Project1.dpr(13) Fatal: Verwendete Unit 'Unit1.pas' kann nicht compiliert werden
Build was not successful |
jaenicke - So 08.05.11 20:09
Ich dachte das rührt vielleicht daher, dass die Pfade falsch ausgelesen werden. Hmm, da ja offenbar keine Datei vermisst wird und ich QuickReport nicht kenne, weiß ich nicht woran das liegt. :nixweiss:
Vielleicht liegen irgendwo verschiedene Dateiversionen einer Unit (oder einer gleichnamigen) oder so, aber... keine Ahnung.
jaenicke - So 09.10.11 01:02
Es gibt eine aktualisierte Version. Ich habe noch ein wenig korrigiert und auch XE2 getestet. Es fehlt noch die Unterstützung der Trialversionen, die werde ich bald noch ergänzen.
jaenicke - Di 11.10.11 06:34
Es gibt jetzt auch den Parameter -directives, mit dem Compilerdirektiven angegeben werden können.
Heimo T. - Do 03.11.11 11:07
Hallo jaenicke,
Habe jetzt mal wieder viel getestet. Wenn ich mit deinem Programm über die Kommandozeile kompiliere, dann bekomme ich folgenden Fehler: Schwerwiegend: E2202 Package '-------------' wird benötigt, konnte aber nicht gefunden werden (Packagename entfernt)
Über die IDE kann ich mein Projekt ohne Probleme kompilieren, deswegen habe ich etwas rumprobiert. Wenn ich in der Delphi IDE unter Projekt --> Optionen --> Ressourcen- Compiler --> Packages den Haken bei "Laufzeit-Packages verwenden" aktiviere, dann bekomm ich in der IDE die gleiche Fehlermeldung. Ich kenn mich da leider nicht aus.
Wo liegt das Problem?
Mfg.
jaenicke - Do 03.11.11 13:26
Das kompilierte Package wird offenbar nicht gefunden. Wie ich das nachstellen könnte ist mir aber nicht wirklich klar...
Lösung für dich könnte sein das Verzeichnis mit dem kompilierten Package in den Systempfad (PATH) aufzunehmen.
Heimo T. - Do 03.11.11 14:55
Ich habe den Pfad hinzugefügt, hat aber nichts geholfen. Mir kommt das komisch vor, ich glaube dass das Package nicht benötigt wird.
Ich werden es weiter probieren, aber danke.
Mfg.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!