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
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.
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.
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.
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 ...
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).
+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
- 1. Warum unterscheidet sich {} + [] von ({} + [])?
- 2. Warum unterscheidet sich die manuelle Einrichtungszeit von der aktuellen Uhrzeit?
- 3. Delphi XE8. FMX. Warum unterscheidet sich die Reihenfolge von CLASS VAR auf der Android-Plattform?
- 4. Wie unterscheidet sich die Dichte von ggplot2 von der Dichtefunktion?
- 5. Delphi 2009 Dokumentation
- 6. Warum unterscheidet sich std :: uint32_t von uint32_t?
- 7. "Delphi Fundamentals" in Delphi 2009
- 8. Warum unterscheidet sich Windows Run: von der CMD-Zeile?
- 9. Warum unterscheidet sich die Textformatierung in der Python 3-Shell von der einer Textdatei?
- 10. Die Java-Ausgabe von Eclipse und Command Line unterscheidet sich
- 11. Die Gründe für ein Upgrade von Delphi 2009
- 12. Warum unterscheidet sich die Kameraansicht in optix von OpenGL?
- 13. den Pfad von der Befehlszeile verwendet finden, wenn eine ausführbare
- 14. Warum ausführbare Datei gefunden
- 15. Warum git AuthorDate unterscheidet sich von CommitDate?
- 16. Warum verwenden Benutzer die Befehlszeile anstelle von IDE?
- 17. In allgemeinen Aufgaben des Typs Exec, warum verhalten sich Befehlszeile und ausführbare Datei anders?
- 18. Warum unterscheidet sich das erstellte Histogramm mit ggplot2 immer von den Beispielen in den Tutorials?
- 19. Name der ausführbaren Anwendung unterscheidet sich von vshost ausführbaren Namen
- 20. Debug-Verhalten unterscheidet sich von der normalen Ausführung in Python
- 21. Wenn der kompilierte Code unterscheidet sich von der Shell ausgewertet?
- 22. Was ist diese Art von Buch in der Delphi IDE?
- 23. Wann unterscheidet sich der UnderlyingSystemType von der aktuellen Typinstanz?
- 24. Zlib in Delphi 2009
- 25. Der Datenbankbesitzer SID unterscheidet sich von der Datenbankeigentümer
- 26. Wie wird der JIT-Debugger in Delphi 2009 eingerichtet?
- 27. Warum unterscheidet sich die Skalierung von Steuerungen zwischen PCs?
- 28. Design Patterns für Delphi 2009
- 29. Warum unterscheidet sich der DoubleValue von NSString von der ursprünglichen Zeichenfolge?
- 30. Die gedruckte PDF-Datei unterscheidet sich von der ursprünglichen PDF-Datei
Wie hilft dies dem OP, diese Lieferung tatsächlich zu tun? –
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. –