Entwickler-Ecke
Programmierwerkzeuge - Compiler zu kompletter Neukompilation zwingen
chrissivo - Mo 29.08.05 18:18
Titel: Compiler zu kompletter Neukompilation zwingen
Hallo,
ich stehe vor folgendem Problem.
Ich möchte mit einem Programm den dcc32-Compiler ansprechen eine bestimmte Delphi-Projekt-Datei zu kompilieren. Dabei gibt es an einer Stelle im Quelltext einen Verweis auf eine Include-Datei:
{$I C:\TEST\PROBE.INC}
Das Problem ist, dass sich der Inhalt der "PROBE.INC" VOR jedem Compileraufruf verändert. Wenn ich nun diese Datei erstelle und anschließend den Delphi-Compiler per ShellExecute aufrufe, dann bekomme ich eine .Exe mit anderem, alten Text aus der Include-Datei.
Rufe ich nun den Compiler mittels der IDE auf, so wird die erstellt AKTUELLE "PROBE.INC" wie gewünscht mit einkompiliert. Rufe ich nun, während die IDE läuft, erneut mein Programm, das mir die PROBE.INC neu erstellt, auf und kompiliere mit der IDE neu, dann wird die geänderte "PROBE.INC" NICHT mit einkompiliert.
Erst mit erneutem Starten der IDE wird auch die neue "PROBE.INC" benutzt.
Ich fürchte, dass dieses Problem damit zusammenhängt, dass er evtl. alte Cache-Dateien verwendet. Gibt es eine Möglichkeit, dem Compiler in der Kommandozeile, wie in der IDE bei jeder Kompilation zu einer kompletten Neukompilation zu zwingen?
Für jede Hilfe bin ich dankbar
Chrissi
PS: Habe zum Aufruf des ShellExecute den Code von
http://www.coding-board.de/board/showthread.php?t=4119 benutzt.
Moderiert von
Gausi: Topic aus CLX / Delphi Language (Object-Pascal) verschoben am Di 30.08.2005 um 13:39
BenBE - Mo 29.08.05 18:58
Gib beim Compilieren einfach den Schalter /B mit an. Dann erzeugt der Compiler JEGLICHE Dateien immer neu, wenn er den Source findet.
Edit: In der IDE heißt der Menüpunkt "Build", "Erstellen" oder "Aktualisieren" unter dem Menü "Projekt".
chrissivo - Mo 29.08.05 20:36
Hm...,
danke für die schnelle Antwort. Also, wie beschrieben, geht es in der IDE über "Projekt erzeugen".
Aber über den Shell-Aufruf funzt das irgendwie nicht...
Gibt es sonst noch eine Möglichkeit?
Vielen Dank erst einmal
Chrissi
chrissivo - Mo 29.08.05 20:41
Ich habe einfach mal probiert den Delphi-Compiler (Delphi32.exe) anstelle des Kommandozeilen-Compilers zu verwenden. Was soll ich sagen? Es läuft!
Damit hat sich für mich gezeigt: Kommandozeilen-Compiler <> IDE-Compiler
Danke
Chrissi
LigH - Mo 29.08.05 20:46
dcc32.exe /b projekt.dpr funktioniert nicht? Sehr sonderbar... Fehlen da vielleicht Include-Pfade, findet der CLI-Compiler zugehörige Projekt-Dateien nicht?
chrissivo - Mo 29.08.05 20:50
Also kompilieren tut er das Projekt wirklich neu, das erkenne ich ja auch am Erstellungsdatum der .Exe. Aber der im Include stehende Teil funktioniert nicht.
Viele Grüße
Chrissi
alzaimar - Mo 29.08.05 21:39
Also, so ein Compiler ist dumm wie Brot, der macht nur das, was Du im sagst. Aber er macht auch wirklich nur das, was Du im sagst. Er benutzt, soweit ich das weiss, nicht die selben Suchpfade wie die IDE. Die musst Du ihm selbst mitteilen. Check mal die Hilfe vom Compiler.
chrissivo - Di 30.08.05 10:56
Hallo,
habe mir die Hilfe mal durchgelesen und konnte da nichts interessantes finden. Meiner Meinung nach benutzt er auch die richtigen Suchpfade, sonst könnte er meiner Meinung nach nicht kompilieren...
Außerdem steht die Include-Datei ja auch mit voller Pfadangabe im Programm.
Ich will an dieser Stelle anmerken, dass es mir nicht unbedingt wichtig war/ist den Kommandozeilen-Compiler zu verwenden, sondern einen Compiler per ShellExecute mit Parametern aufrufen zu können.
Das funktioniert, wie es soll und damit bin ich glücklich :D
Danke
AndyB - Di 30.08.05 11:39
chrissivo hat folgendes geschrieben: |
| sondern einen Compiler per ShellExecute mit Parametern aufrufen zu können. |
Ich hoffe du machst was für dich, oder ein IDE Plugin oder was für Delphi-Benutzer, denn den Compiler darf man nicht weitergeben.
chrissivo - Di 30.08.05 13:03
Ja, das Programm benutze nur ich, weitergegeben werden soll eigentlich nur das, was herauskommt. Und ich nehme einfach mal an, dass es der Lizenzvereinbarung keine Gefährdung gebietet, wenn ich den Compiler anstatt über den Klick in der IDE einfach über einen Aufruf bediene.
Das ganze hat den Hintergrund, dass das erzeugte Programm mit Namen des Benutzers versehen sein soll, und dieser wird schlicht aus einer Liste ausgelesen und dann in eine Include-Datei gepackt. Anschließend soll der Compiler dann die neu erstelle Include-Datei in den Quelltext einbinden.
Viele Grüße
Chrissi
tommie-lie - Di 30.08.05 13:24
chrissivo hat folgendes geschrieben: |
| Das ganze hat den Hintergrund, dass das erzeugte Programm mit Namen des Benutzers versehen sein soll, und dieser wird schlicht aus einer Liste ausgelesen und dann in eine Include-Datei gepackt. Anschließend soll der Compiler dann die neu erstelle Include-Datei in den Quelltext einbinden. |
Schonmal an eine
STRINGRESSOURCE gedacht? ;-)
chrissivo - Di 30.08.05 13:28
Hi,
a) sagt mir nichts,
b) im Delphi-Forum findet man dazu mit deinem Link nichts
c) die Delphi-Hilfe findet nichts
d) erklär mir doch bitte, was du meinst!
Danke
Chrissi
tommie-lie - Di 30.08.05 13:33
chrissivo hat folgendes geschrieben: |
| b) im Delphi-Forum findet man dazu mit deinem Link nichts |
Ja, ist mir auch gerade aufgefallen, Link ist korrigiert ;-)
| chrissivo hat folgendes geschrieben: |
| d) erklär mir doch bitte, was du meinst! |
Du liest im Programm die Strings aus einer Ressource aus. Eine solche Ressource kann man ohne einen Compiler austauschen, nur zum Erstellen der Ressourcen brauchst du den Resource Compiler (brcc32.exe). Das heißt du baust dir eine einzige Echse und setzt anschließend aus einem Pool an Ressourcen immer eine andere Ressource dran.
chrissivo - Di 30.08.05 13:48
tommie-lie hat folgendes geschrieben: |
| ... und setzt anschließend aus einem Pool an Ressourcen immer eine andere Ressource dran. |
Danke für den Hinweis,die Ressourcen
a) möchte ich abernicht mitgeben
b) werden dieses teilweise dynamisch erzeugt und ich möchte den Code für die Erzeugung nicht mitliefern :wink:
Vielen Dank trotzdem
Chrissi
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!