Estoy produciendo compilaciones utilizando MSBuild, y configuraciones de compilación configuradas en el dproj en la línea de comandos. Es un poco desconcertante que el tamaño de los ejecutables así producidos sea diferente (no por mucho, ¡pero igual!) A lo que produce una compilación IDE. ¿Alguna idea de por qué? ¿Pensaría que se usó el mismo compilador?¿Por qué el ejecutable producido por Delphi 2009 IDE es diferente al producido en la línea de comando?
Respuesta
Para ver qué es IDE, haga clic en
Herramientas | Opciones | Opciones de entorno | Compilando y corriendo | Mostrar línea de comando
Y puede verificar los mensajes del compilador.
La alimentación principal de la construcción de la línea de comandos del compilador de Delphi es estandarización - a identificar explícitamente las opciones (en la línea de comandos, en los archivos .cfg, etc.), y el compilador sigue las opciones proporcionadas exclusivamente. Por el contrario, el IDE tiene muchos otros comportamientos que no son claros y explícitos; por ejemplo, puede buscar rutas de biblioteca no especificadas en las Opciones del proyecto. Supongo que algo está sucediendo en la compilación IDE de la que no eres del todo consciente, y esta es la razón por la que las compilaciones estandarizadas se realizan desde la línea de comandos.
Este comportamiento ha existido en todas las versiones de Delphi que he usado. (5 - 2006). No me preocuparía mucho al respecto. Cuando lo descubrí por primera vez, pasé mucho tiempo tratando de resolver la diferencia. ¿Extrañé una bandera del compilador? ¿Hay alguna discrepancia entre el IDE y las opciones compatibles del compilador de la línea de comandos?
Al final decidí que no era tan importante. Ambos produjeron consistentemente ejecutables funcionalmente equivalentes.
Si proporciona exactamente los mismos parámetros para el compilador de línea de comandos, los ejecutables producidos serán virtualmente idénticos.
De hecho, el IDE solo llama al compilador de la línea de comandos. Compila tu proyecto en el IDE y mira la ventana de mensajes. verá la llamada completa de dcc32.exe ...
La primera respuesta al uso de la línea de comandos para coherencia de construcción es correcta y es probablemente algo de lo que no debe preocuparse si confía en un sistema de compilación donde los archivos de producción siempre se obtienen de las compilaciones de la consola.
Por otro lado, si realmente quieres saber qué está pasando, debes activar los archivos de mapas (en el nivel de detalle completo) y compararlos/diferenciarlos. Si hay diferencias entre los dos, aparecerán allí. Cualquier otra diferencia que pueda existir es probablemente el resultado de una opción de línea de comunicación que sea diferente (como un indicador condicional que se puede establecer en la configuración de IDE).
+1 para la recomendación de archivo de mapa. Parecen tener mucho menos enfoque ahora, pero siguen siendo muy válidos para saber qué es lo que realmente usa la aplicación. – skamradt
- 1. ¿Qué es exactamente el ejecutable producido por Opa?
- 2. Reducir el tamaño del ejecutable producido por GHC
- 3. Depuración de un núcleo producido por valgrind
- 4. ¿Debo ver el bytecode producido por un compilador Java?
- 5. Cómo configurar la clase principal en el archivo de manifiesto en el contenedor producido por el proyecto NetBeans
- 6. Cómo excluir archivos R * .class producido por una acumulación Proguard
- 7. Advertencia: Esta clase probablemente fue producido por un compilador rota
- 8. ¿Cómo obtener una referencia al archivo jar producido por la compilación de Gradle?
- 9. Delphi IDE Project Comando "Limpio": ¿Qué hace?
- 10. ¿Este marco de pila producido es el correcto?
- 11. Django URLValidator producido errores falsos
- 12. ha producido un error al intentar utilizar Nservice bus
- 13. ¿Se ha producido realmente OverflowError?
- 14. Diferencias en el bytecode de java producido por los compiladores de Oracle y Eclipse
- 15. ¿Hay alguna manera de ver el código nativo producido por theJITter para C#/CIL dado?
- 16. ¿Por qué la salida es diferente?
- 17. ¿por qué obtengo una constante no inicializada? ¿Se ha producido un error al ejecutar el servidor webrick?
- 18. 'System.StackOverflowException' se ha producido en PresentationCore.dll
- 19. ¿Puede anular los permisos de archivo para el volcado de pila producido por -XX + HeapDumpOnOutOfMemoryError?
- 20. ggplot2: ¿Hay alguna solución para el texto irregular y de baja calidad producido por geom_text()?
- 21. ha producido un error durante la inicialización de VM
- 22. Ejecutar archivo por lotes desde Delphi IDE
- 23. ¿Puede el bytecode producido por luac usarse en computadoras sin biblioteca Lua?
- 24. ¿Se puede ejecutar IL producido por el compilador C# 4.0 en CLR 2.0?
- 25. Se han producido problemas al intentar guardar el estado del entorno de trabajo en Eclipse
- 26. ¿Por qué se incluye Indy 9 con Delphi 2009? ¿Es seguro de usar?
- 27. ¿Se ha producido un impacto en la memoria y el rendimiento al utilizar Bloch's Builder Pattern?
- 28. Cómo agregar el nodo xsl stylesheet a XML producido por XmlSerializer?
- 29. ¿De qué IDE se desarrolló el Delphi IDE?
- 30. ¿Por qué tengo que asignar la fuente de la Lona para cambiar el tamaño de la fuente en Delphi 2009?
Sin embargo, ¿cómo ayuda esto al OP a hacer ese suministro? –
Ayuda en la forma en que puede asegurarse de que/could/control su herramienta de compilación (Steve mencionó MSBuild en su pregunta) para compilar * exactamente * de la misma manera que lo hace desde el IDE de Delphi. –