Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Compilieren per Kommandozeile (https://www.delphipraxis.net/87290-compilieren-per-kommandozeile.html)

Gruber_Hans_12345 26. Feb 2007 15:23


Compilieren per Kommandozeile
 
Hi

Habe gerade versucht, mein Projekt mal per Kommandozeile zu kompilieren, da ich es gerne mal automatisieren möchte, und dafür nicht jedesmal die IDE zu öffnen / Projekt zu wechseln.

Allerdings stoße ich da auf Probleme.
und zwar habe ich das problem, das mein Unit/Ressource/IncludePfad zu lange werden

Der Pfad ist jeweils 4000 zeichen lang, in einer cfg datei werden nur die ersten 1080 zeichen ca. verwendet, der rest wird anscheinend einfach abgeschnitten.
wenn ichs per Kommandozeile mit -U -I -R angebe werden zu diesem zeitpunkt ja auch alle %LIBPATH% aufgelöst, und die gesammte zeile in der Kommandozeile wird zu lange, das ein teil abgeschnitten wird.

Per ShellExecute, wird anscheinend auch ab 2000 zeichen sowas einfach 5 "Zugriff verweigert" zurückgegeben.

gibt es sonst noch irgendwelche Möglichkeiten ein projekt zu Kompilieren?

sh17 26. Feb 2007 16:22

Re: Compilieren per Kommandozeile
 
per batch auf?

probier es mal so:
Delphi-Quellcode:
cd ..\srcpfadmitdemprojekt\

echo /$A4 > dcc32.cfg
echo /$B- >> dcc32.cfg
echo /$C- >> dcc32.cfg
echo /$D- >> dcc32.cfg
echo /$E- >> dcc32.cfg
echo /$F- >> dcc32.cfg
echo /$G+ >> dcc32.cfg
echo /$H+ >> dcc32.cfg
echo /$I+ >> dcc32.cfg
echo /$J- >> dcc32.cfg
echo /$K- >> dcc32.cfg
echo /$L- >> dcc32.cfg
echo /$M- >> dcc32.cfg
echo /$N+ >> dcc32.cfg
echo /$O- >> dcc32.cfg
echo /$P+ >> dcc32.cfg
echo /$Q- >> dcc32.cfg
echo /$R- >> dcc32.cfg
echo /$S- >> dcc32.cfg
echo /$T- >> dcc32.cfg
echo /$U+ >> dcc32.cfg
echo /$V+ >> dcc32.cfg
echo /$W- >> dcc32.cfg
echo /$X+ >> dcc32.cfg
echo /$Y- >> dcc32.cfg
echo /$Z1 >> dcc32.cfg
echo /cg >> dcc32.cfg
echo /AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;
       DbiProcs=BDE;DbiErrs=BDE; >> dcc32.cfg
echo /H+ >> dcc32.cfg
echo /W+ >> dcc32.cfg
echo /M- >> dcc32.cfg
echo /$M16384,1048576 >> dcc32.cfg
echo /B >> dcc32.cfg
echo /K$00400000 >> dcc32.cfg
rem echo -Q >> dcc32.cfg
echo /ND:\Temp\dcu >> dcc32.cfg
echo /LE >> dcc32.cfg
echo /LN >> dcc32.cfg
echo /LUvcl;rtl;vclx;VclSmp;vclshlctrls;dbrtl;adortl;vcldb;
        qrpt;bdertl;vcldbx;dsnap;cds;bdecds;teeui;teedb;tee;
        teeqr;ibxpress;visualclx;visualdbclx;vclie;xmlrtl;inet;
        inetdbbde;inetdbxpress;inetdb;nmfast;dbexpress;dbxcds;
        dclOffice2k;soaprtl;undweiterepackages >> dcc32.cfg
echo /I"C:\Programme\BORLAND\DELPHI6\LIB;C:\Programme\BORLAND\DELPHI6\BIN;
        C:\Programme\BORLAND\DELPHI6\IMPORTS;UNDWEITEREPFADE" >> dcc32.cfg
echo /U"C:\Programme\BORLAND\DELPHI6\LIB;C:\Programme\BORLAND\DELPHI6\BIN;
        C:\Programme\BORLAND\DELPHI6\IMPORTS;;UNDWEITEREPFADE" >> dcc32.cfg

del /q d:\output\meinprojekt.exe

rename meinprojekt.cfg meinprojekt.c

c:\programme\borland\delphi6\bin\dcc32.exe meinprojekt.dpr -E"D:\output" -DSAX_WIDESTRINGS;XML_WIDESTRINGS

rename meinprojekt.c meinprojekt.cfg

del dcc32.cfg

cd d:\wohinauchimmer\
pause
//Edit: hab mal die Zeilen gekürzt

Gruber_Hans_12345 26. Feb 2007 16:24

Re: Compilieren per Kommandozeile
 
ich habs mit einem manuell erstellten dcc32.cfg file probiert, nur das problem ist, wie schon erwähnt, das er bei den Parametern -I -U -R nur die ersten 1080 zeichen verwendet den rest verwirft er einfach ... dh. je nachdem wie ich die pfade anordne wirft er früher oder später einen fehler, das er gewisse units nicht mehr findet ...

Gruber_Hans_12345 27. Feb 2007 12:26

Re: Compilieren per Kommandozeile
 
hab mir gerade mal finalbuilder runtergeladen, um zu testen, ob die es können den dcc32 mit den langen pfaden aufzurufen, und bei denen funkt es, jetzt wäre es nur noch gut, wenn man wüsste, wie man den dcc32 aufrufen kann, ohne in die probleme zu kommen, das der aufruf zu lange wird.

Gibt es einen parameter, der einen pfad für -I -U und -R gleichzeitig angibt?

den, wenn ich für -I -R und -U jeweils den Pfad angebe, dann wird die gesamte zeile zu lange zu ausführen.
Lasse ich einen weg, dann findet er so manches .inc oder ne .res nicht mehr (und einzeln rauspicken wo die sind, möchte ich nicht)

irgendwie muß das doch gehen ...


[edit] ... .so, bin mal einen schritt weiter, mit CreateProcess akzeptiert er mir mal die 3*langen Pfade als Parameter, und kompiliert mal munter drauf los

jetzt brauch ich dann nur noch wissen, wie ich die ausgabe vom CreateProcess abfange, den Rückgabe wert auswerten kann, (ob ein Fehler aufgetreten ist).
Dann muß ich im nachhinein noch die JCL DebugInfo reinbekommen
Muß ich jetzt auch die Versioninfo händisch raufzählen? ... na mal schaun

sh17 27. Feb 2007 12:39

Re: Compilieren per Kommandozeile
 
Zitat:

Zitat von Gruber_Hans_12345
ich habs mit einem manuell erstellten dcc32.cfg file probiert, nur das problem ist, wie schon erwähnt, das er bei den Parametern -I -U -R nur die ersten 1080 zeichen verwendet den rest verwirft er einfach ... dh. je nachdem wie ich die pfade anordne wirft er früher oder später einen fehler, das er gewisse units nicht mehr findet ...

wird %LIBPATH% u.a. in einer dcc32.cfg auch vorher auf die volle Länge aufgelöst?

Gruber_Hans_12345 27. Feb 2007 12:46

Re: Compilieren per Kommandozeile
 
nein, bei mir wird weder %LIBPATH% noch $(LIBPATH) aufgelöst, wenn ichs in der dcc32.cfg verwende, da muß ich immer den vollständig aufgelösten Pfad reinschreiben (sonst findet ers gar nicht)

Hawkeye219 27. Feb 2007 12:54

Re: Compilieren per Kommandozeile
 
Hallo,

Mike Williams (TeamB) schreibt in diesem Thread, daß der Schalter /U in einer .cfg-Datei mehrfach auftauchen darf.

Gruß Hawkeye

turboPASCAL 27. Feb 2007 13:08

Re: Compilieren per Kommandozeile
 
Uff, ein Path der 4000 Zeichen Lang ist.?!
Zwangsläufig wird dann irgend wann etwas schlef laufen.

Eine meiner typischen Batchfiles zum Kompilieren per Kommandozeile schaut so aus:

Code:
@ECHO OFF

CALL _CleanUp.bat

CLS

SET APPNAME=NewDay
SET RESOURCEFILE="_resources\resources"
SET UNITDIRS=_units;_unitsEx;
SET UNITDIRS=%UNITDIRS%C:\Programme\Borland\Delphi6\Projects\MyPackages;

echo.
echo Make %APPNAME% ...
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
echo Create Resourcefile: %RESOURCEFILE%...
BRCC32 %RESOURCEFILE%.rc
echo.
echo.

echo Create Application: %APPNAME%...
DCC32 -$O+ -$R+ -$I+ -U"%UNITDIRS%" %APPNAME%.dpr
echo.
echo Done.

SET APPNAME=
SET RESOURCEFILE=
SET UNITDIRS=

pause
Lange Pfade vermeide ich schon wegen der übersichtlichkeit.

Gruber_Hans_12345 27. Feb 2007 13:22

Re: Compilieren per Kommandozeile
 
also, es funktionieren beide wege
mit CreateProcess kann ich die 3 pfade ohne probs übergeben, und er compileirt
das trennen der Pfade in der dcc32.cfg funktioniert auch ohne probleme (allerdings kennt er bei mir keine $(LIBPATH) bzw löst diese nicht auf, muß alle pfad als aufgelöst reinschreiben)

ja ich weiss, pfad mit über 4000 zeichen ist viel, aber beim build, will ich, das er alles als Source Code reinkompiliert, und da haben sich mittlerweile schon ein haufen komponenten mit noch mehr Pfaden.

(Alleine die devExpress haben sich mit einer Pfadlänge von 1600 Zeichen registriert)
und mittlerweile sind es ja auch schon knapp über 2.4M Zeilen, was er da zusammen kompiliert, das dauert und beinhaltet nun mal viele units in vielen verzeichnissen ...

shmia 27. Feb 2007 13:28

Re: Compilieren per Kommandozeile
 
Schau dir mal den Installer der JCL an.
Da steckt jede Menge Know-How drin, das du für deine eigenen Zwecke anzapfen kannst.
Der Installer hat die Delphi IDE anscheinend komplett im Griff; er zeigt Fehler & Warnungen in einem Memo an, kommt mit verschiedenen parallel installierten Delphi-Versionen klar, ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 Uhr.
Seite 1 von 2  1 2      

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-2025 by Thomas Breitkreuz