Sto producendo build usando MSBuild e costruisco configurazioni configurate nel dproj sulla riga di comando. È leggermente sconcertante che le dimensioni degli eseguibili così prodotti siano diverse (non di molto, ma ancora!) A ciò che produce un build IDE. Qualche idea, perché? Avrei pensato che fosse usato lo stesso compilatore?Perché l'eseguibile prodotto da Delphi 2009 IDE è diverso da quello prodotto sulla riga di comando?
Perché l'eseguibile prodotto da Delphi 2009 IDE è diverso da quello prodotto sulla riga di comando?
risposta
Per vedere quali IDE è doind, controllare
Strumenti | Opzioni | Opzioni ambientali | Compilazione ed esecuzione | Mostra riga di comando
E puoi controllare i messaggi del compilatore.
La forza principale della costruzione dalla riga di comando del compilatore Delphi è standardizzazione - a identificare in modo esplicito le opzioni (sulla riga di comando, nei file .cfg, ecc), e il compilatore segue le opzioni fornite esclusivamente. Al contrario, l'IDE ha molti altri comportamenti che non sono chiari ed espliciti - per esempio, può cercare percorsi della libreria non specificati nelle Opzioni progetto. La mia ipotesi è che qualcosa stia accadendo nella build IDE di cui non si è completamente consapevoli - e questo è il motivo per cui le build standardizzate sono fatte dalla riga di comando.
Questo comportamento è presente in ogni versione di Delphi che ho usato. (5 - 2006). Non mi preoccuperei molto di questo. Quando l'ho scoperto per la prima volta ho passato un sacco di tempo a cercare di risolvere la differenza. Ho perso una bandiera del compilatore? C'è una discrepanza tra l'IDE e le opzioni supportate dal compilatore della riga di comando?
Alla fine ho deciso che non era un grosso problema. Entrambi producevano in modo coerente eseguibili equivalenti dal punto di vista funzionale.
Se si forniscono esattamente gli stessi parametri al compilatore della riga di comando, gli eseguibili prodotti saranno praticamente identici.
Infatti, l'IDE chiama semplicemente il compilatore della riga di comando. Compila il tuo progetto nell'IDE e guarda la finestra dei messaggi. vedrai la chiamata dcc32.exe completa ...
La prima risposta sull'uso della riga di comando per la consistenza della build è corretta ed è probabilmente qualcosa di cui non devi preoccuparti se ti stai affidando a un sistema di compilazione dove i file di produzione provengono sempre dalle build della console.
D'altra parte, se vuoi veramente capire cosa sta succedendo, devi attivare i file di mappe (a livello di dettaglio completo) e confrontarli/differirli. Se ci sono differenze tra i due, essi verranno mostrati lì. Eventuali altre differenze che possono esistere sono probabilmente il risultato di un'opzione di riga di comando diversa (come un flag condizionale che può essere impostato nelle impostazioni IDE).
+1 per consigli sui file di mappe. Sembrano avere molto meno attenzione ora, ma sono ancora molto validi per sapere cosa viene effettivamente utilizzato dall'applicazione. – skamradt
- 1. Magento ottiene prodotto configurabile da prodotto semplice anche se il prodotto config è disabilitato
- 2. è diverso da quello di apache -?
- 3. Errore prodotto da mysql selezionare
- 4. Casuale diverso da quello casuale
- 5. Debug di un core prodotto da valgrind
- 6. Orologio $ angolare | restituzione del prodotto da funzioni
- 7. Oggetto prodotto restituito da WooCommerce per ID
- 8. Esegui comando vim da riga di comando
- 9. Che cosa è esattamente l'eseguibile prodotto da Opa?
- 10. Perché il prodotto [] restituisce 1?
- 11. Come compilare il file Delphi RES da riga di comando
- 12. Esegui file batch da Delphi IDE
- 13. prodotto eseguibile xcode per progetto C++
- 14. Come ottenere gli attributi personalizzati di un prodotto da WooCommerce
- 15. Dovrei guardare il bytecode prodotto da un compilatore java?
- 16. Delphi WideString e Delphi 2009+
- 17. "Delphi Fundamentals" in Delphi 2009
- 18. QuickReports è incluso in Delphi 2009?
- 19. Java Generics - tipo di ritorno atteso diverso da quello attuale
- 20. xorl% eax,% eax nel codice assembly x86_64 prodotto da gcc
- 21. SQL diverso prodotto da Where (l => l.Side == 'A') vs Where (l => l.Side.Equals ('A')
- 22. Delphi 2009 RawByteString vagari
- 23. in grado di acquistare In App prodotto da Google Play
- 24. Perché il risultato di questo cast esplicito è diverso da quello implicito?
- 25. Magento - filtro di raccolta del prodotto da più SKU
- 26. Modificare il testo "Scegli un'opzione ..." sulla pagina del prodotto Magento
- 27. Algoritmo di prodotto cartesiano efficiente
- 28. Versione file Vs. Versione prodotto
- 29. Perché la relazione tra un prodotto configurabile e un prodotto semplice viene memorizzata due volte?
- 30. Perché * p ++ è diverso da * p + = 1?
In che modo questo aiuta l'OP a fare effettivamente quel rifornimento, però? –
Aiuta a fare in modo che/possa/controlli il tuo strumento di compilazione (Steve ha menzionato MSBuild nella sua domanda) per compilare * esattamente * nello stesso modo in cui lo fai dall'ID di Delphi. –