Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Kommandozeilen-Compiler dcc32 (https://www.delphipraxis.net/18350-kommandozeilen-compiler-dcc32.html)

Hansa 17. Mär 2004 08:48


Kommandozeilen-Compiler dcc32
 
Hi,

weiß jemand, wie man dem Teil beibringt, selbst eine RES Datei anzulegen, sofern sie nicht da ist ? In der IDE kommt die Warnung "nicht vorhanden. Wird neu angelegt". Ich muß 30 Programme auf einmal compilieren. Die könnte ich zwar alle in die IDE laden, aber das ists wohl nicht. Zumal sich der Fall wahrscheinlich wiederholen wird.

NicoDE 17. Mär 2004 10:08

Re: Kommandozeilen-Compiler dcc32
 
Wenn Du Windows NT hast (erweiterte Syntax des FOR-Befehls), grep.exe im Pfad (Delphi6\Bin), in %Temp% eine default.res und die Untervezeichnisse der Projekte keine Leerezeichen enthalten (weil grep den Dateinamen ohne "" zurückgibt),
dann, aber auch nur dann...
Code:
FOR /F "usebackq" %I IN (`grep.exe -ldor- "{$R *.res}" *.dpr`) DO IF EXIST "%~dpnxI" IF NOT EXIST "%~dpnI.res" COPY "%Temp%\default.res" "%~dpnI.res"
In einer Batch muss jedes % in %% geändert werden.


Viel Spass

ps: warum shreibst Du nicht eben ein Tool dafür?

Hansa 17. Mär 2004 12:04

Re: Kommandozeilen-Compiler dcc32
 
Das ist ja schön und gut, aber was soll ich mit grep ? Ich weiß vorher schon, daß die *.res gebraucht wird. In der IDE wird die erzeugt, falls sie nicht da ist. dcc32 hat genügend Schalter, aber den für diesen Zweck finde ich nicht. Oder gibt es den gar nicht ? Könnte theoretisch sein. Dann erkläre mir bitte mal, was Deine Batch da genau machen soll. 8) Momentan habe ich Programm No. 18 in der IDE, damit die RES neu erzeugt wird, besser wäre es alles auf einen Schlag neu zu compilieren.

NicoDE 17. Mär 2004 12:26

Re: Kommandozeilen-Compiler dcc32
 
Ich wüßte nicht, dass einen dcc32-Schalter dafür gibt, sorry.

grep sucht in diesem Falle ab dem aktuellen Verzeichnis rekursiv nach allen *.dpr, welche den Text '{$R *.res}' enthalten und gibt die Dateinamen zurück, die wiederum mit der FOR-Schleife bearbeitet werden. Wenn der zusammengesetzte Dateiname (dpr) existiert (Paranoia wegen Leerzeichen in Unterverzeichnissen), wird nachgesehen, ob die *.res existiert - wenn nicht wird die %temp%\default.res mit dem richtigen Namen dorthin kopiert...
...kann man auch komplizierter machen ;)

Hansa 17. Mär 2004 12:34

Re: Kommandozeilen-Compiler dcc32
 
Langsam weiß ich, was Du da vorhast. Aber eigentlich würde doch dann auch ein IF NOT EXIST {RES} blabla reichen, ohne grep ? Ich hasse diese Batch Syntax. Und Schalter gibt es keinen ? Ich finde ihn ja selbst nicht. Also ist das wohl wirklich nur in der IDE.

NicoDE 17. Mär 2004 12:53

Re: Kommandozeilen-Compiler dcc32
 
Zitat:

Zitat von Hansa
Aber eigentlich würde doch dann auch ein IF NOT EXIST {RES} blabla reichen, ohne grep ?

Sicher reicht das (und ist kompatibel zur Win9x-Shell).
Ich bin von ca. fünftausend Projekten ausgegangen ;)

Hansa 17. Mär 2004 15:48

Re: Kommandozeilen-Compiler dcc32
 
Zitat:

Zitat von Hansa
...Ich muß 30 Programme auf einmal compilieren...

nix 5000, wer macht so was ? :lol: Also wirklich nichts mit Compilerschaltern ? :gruebel:

NicoDE 17. Mär 2004 18:33

Re: Kommandozeilen-Compiler dcc32
 
Zitat:

Zitat von Hansa
Also wirklich nichts mit Compilerschaltern?

Ich denke nicht.

ps: Die Projekt-Verwaltung (Modules.TProject) ist in der CoreIDExx.bpl (Core Integrated Development Environment) implementiert. TProject erstellt (ResUtils.TResFile) mit dem 'MAINICON' der Hautpinstanz (IDE) die neue Ressourcendatei...
Da der Compiler wenig mit der CoreIDE zu schaffen hat, müsste es dort doppelt implementiert sein (wovon ich nicht ausgehe...).
ps2: wie wäre es mit delphi32.exe Project.dpr -m -ns

MaBuSE 25. Jun 2004 12:31

Re: Kommandozeilen-Compiler dcc32
 
Zitat:

Zitat von NicoDE
Wenn Du Windows NT hast (erweiterte Syntax des FOR-Befehls), grep.exe im Pfad (Delphi6\Bin), in %Temp% eine default.res und die Untervezeichnisse der Projekte keine Leerezeichen enthalten (weil grep den Dateinamen ohne "" zurückgibt),
dann, aber auch nur dann...
Code:
FOR /F "usebackq" %I IN (`grep.exe -ldor- "{$R *.res}" *.dpr`) DO IF EXIST "%~dpnxI" IF NOT EXIST "%~dpnI.res" COPY "%Temp%\default.res" "%~dpnI.res"
In einer Batch muss jedes % in %% geändert werden.

Einfach ein tokens=* einfügen, dann ist die komplette Zeile in %I :-)
Es dürfen also Leerzeichen verwendet werden.

Code:
FOR /F "usebackq tokens=*" %I IN (`grep.exe -ldor- "{$R *.res}" *.dpr`) DO IF EXIST "%~dpnxI" IF NOT EXIST "%~dpnI.res" COPY "%Temp%\default.res" "%~dpnI.res"


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