2009-05-22 2 views
9

Ich produziere Builds mit MSBuild und erstelle Konfigurationen, die im dproj auf der Kommandozeile eingerichtet wurden. Es ist etwas beunruhigend, dass die Größe der ausführbaren Dateien unterschiedlich ist (nicht viel, aber immer noch!), Was ein IDE-Build produziert. Irgendwelche Ideen warum? Ich hätte gedacht, dass der gleiche Compiler verwendet wird?Warum unterscheidet sich die von Delphi 2009 IDE erstellte ausführbare Datei von der in der Befehlszeile erzeugten?

Antwort

8

Um zu sehen, was IDE ist, überprüfen Sie

Tools | Optionen | Umgebungsoptionen | Kompilieren und Ausführen | Befehlszeile anzeigen

Und Sie können die Compiler-Nachrichten überprüfen.

10

Die Hauptleistung des Aufbaus aus dem Delphi-Befehlszeilencompiler ist Standardisierung - Sie identifizieren explizit die Optionen (in der Befehlszeile, in den .cfg-Dateien usw.), und der Compiler folgt den ausschließlich bereitgestellten Optionen. Im Gegensatz dazu verfügt die IDE über viele andere Verhaltensweisen, die nicht eindeutig und explizit sind. Beispielsweise kann sie nach Bibliothekspfaden suchen, die nicht in den Projektoptionen angegeben sind. Meine Vermutung ist, dass etwas in dem IDE-Build passiert, von dem Sie sich nicht ganz bewusst sind - und deshalb werden standardisierte Builds von der Kommandozeile aus ausgeführt.

0

Dieses Verhalten ist in jeder Version von Delphi, die ich verwendet habe, vorhanden. (5 - 2006). Ich würde mir darüber nicht viel Sorgen machen. Als ich es zum ersten Mal entdeckte, verbrachte ich viel Zeit damit, den Unterschied zu lösen. Habe ich eine Compiler-Flagge übersehen? Gibt es eine Diskrepanz zwischen der IDE und den vom Befehlszeilen-Compiler unterstützten Optionen?

Am Ende entschied ich, dass es nicht so ein großes Problem war. Beide produzierten durchweg funktionsäquivalente ausführbare Dateien.

0

Wenn Sie dem Befehlszeilencompiler genau dieselben Parameter zur Verfügung stellen, sind die erzeugten ausführbaren Dateien praktisch identisch.

In der Tat ruft die IDE nur den Befehlszeilen-Compiler auf. Kompilieren Sie Ihr Projekt in der IDE und sehen Sie sich das Nachrichtenfenster an. Sie werden den vollständigen Aufruf von dcc32.exe sehen ...

+1

Wie hilft dies dem OP, diese Lieferung tatsächlich zu tun? –

+0

Es hilft auf die Art und Weise, dass Sie sicherstellen können, dass Ihr Build-Tool (Steve erwähnt MSBuild in seiner Frage)/kompilieren * genau * genau wie Sie aus der Delphi IDE kompilieren können. –

3

Die erste Antwort auf die Befehlszeile für Build-Konsistenz ist richtig und es ist wahrscheinlich etwas, worüber Sie sich nicht sorgen müssen, wenn Sie sich auf ein Build-System verlassen Produktionsdateien stammen immer aus den Konsolen-Builds.

Auf der anderen Seite, wenn Sie wirklich herausfinden wollen, was vor sich geht, sollten Sie Map-Dateien (auf der gesamten Detailebene) aktivieren und vergleichen/diff. Wenn es Unterschiede zwischen den beiden gibt, werden sie dort auftauchen. Alle anderen möglicherweise vorhandenen Unterschiede sind wahrscheinlich darauf zurückzuführen, dass eine Befehlszeilenoption anders ist (z. B. ein bedingtes Flag, das in den IDE-Einstellungen festgelegt werden kann).

+0

+1 für die Kartendateiempfehlung. Sie scheinen jetzt viel weniger Fokus zu haben, aber sie sind immer noch sehr gültig, um zu wissen, was tatsächlich von der Anwendung verwendet wird. – skamradt

Verwandte Themen