delphi build compilation delphi-6

¿Cuál es la diferencia entre compilar y construir en Delphi?



build compilation (4)

@Daisetsu, aquí está la diferencia entre compilar y compilar.

La compilación compila todas las unidades usadas en un proyecto cuando el código fuente está disponible.

Compilar compila solo las unidades usadas cambiadas.

En mi experiencia personal, cuando realiza cambios en la configuración del compilador, debe ejecutar una compilación de la aplicación, para que los cambios se reflejen en todas las unidades del proyecto.

Con Delphi-6 hay dos opciones: Construir y Compilar.

Sé que cuando ejecuto un programa, compila solo los archivos que han cambiado y usa las DCU para aquellos que no lo han hecho. Cuando hago clic en compilar, aparentemente reconstruye las DCU.

Lo que me he estado preguntando es que, cuando hago un programa para el lanzamiento (cambio de configuración de compilación, variables condicionales, etc.), ¿puedo simplemente compilar, o tengo que hacer una compilación completa?

¿Qué sucede si no hago una compilación completa, hay alguna consecuencia?


Al preparar un lanzamiento, deberías hacer una compilación completa.
No hay excusa para no hacerlo, el compilador de Delphi es bastante rápido.

Aclarar la importancia de la liberación reproducible

  • Cuando prepare un lanzamiento, tendrá una versión de su producto que otras personas utilizarán.
  • Si informan problemas, es posible que deba volver a esa versión para probar y solucionar el problema.
  • Si no hizo una compilación completa , pero en cambio confió en las DCU existentes, existe la posibilidad de que uno de sus archivos de origen no se vuelva a compilar.
  • Incluso si esa posibilidad es bastante pequeña, esa posibilidad puede obstaculizar seriamente su capacidad para resolver el problema rápidamente.
  • Este problema empeora a medida que un sistema se hace más grande, tiene más interdependencias y tiene más versiones "compatibles en la naturaleza".

Para su propia cordura , le recomiendo que siempre realice una compilación completa para una versión liberable.
Regularmente hago compilaciones completas incluso para versiones no liberables.


Siempre debes construir al cambiar la configuración.

Los archivos DCU compilados anteriormente pueden haber sido compilados con diferentes configuraciones, como las definidas por el compilador. Lo que puede hacer que dos unidades en el mismo proyecto se compilen con diferentes configuraciones.


¿Cuándo construir, cuando compilar?

El compilador solo recompila automáticamente las unidades cuando cambia la marca de fecha y hora de los archivos de origen .pas (1,2).

En otros cambios de estado en el proyecto (directivas, depuración u otras configuraciones del compilador, etc.), el compilador no se compilará automáticamente. Ahí es cuando necesitas forzar una construcción.

También debe forzar una reconstrucción cuando los archivos .inc u otros archivos incluidos ($ I) cambian (3), ya que su marca de fecha y hora no está marcada.

Entonces, en resumen, cuando cualquier cosa excepto los archivos .pas de la unidad cambian, necesitas hacer una compilación.

Hay algunos casos extraños en la construcción. La mayoría da como resultado un error "no se puede encontrar la unidad xxx" mientras parece estar allí

  1. uno es cuando la ruta de la unidad en el proyecto es incorrecta, o usa una ruta relativa mientras el directorio de trabajo es incorrecto. (Ver Delphi depurar una unidad equivocada )
  2. (No estoy completamente seguro de esto, es una hipótesis) un .dcu se vuelve a compilar debido a los CRC (1), pero el dcu recién compilado se coloca en un directorio diferente. Esto no es un problema para la compilación actual (ya que el dcu correcto ya está cargado), pero en una compilación subsiguiente (por ejemplo, un paquete dependiente) se encuentra nuevamente el archivo dcu antiguo, y la fuente no -> error. En caso de duda, siempre limpie los directorios de construcción eliminando recursivamente todos los DCU
  3. la unidad se menciona con un camino incorrecto en el .dpr

(1) y si Delphi es como FPC, .dcu contiene un CRC de la sección de interfaz de todos los dcu de los que depende. Esto se puede usar para verificar si hay una necesidad adicional de recompilar también. Por ejemplo, debido a la manipulación del sistema de archivos (moviendo dcu''s)

(2) para los expertos, vea también {$ implicitbuild xx}

(3) a diferencia de Delphi, el FPC se reconstruye en los cambios de .inc. El proyecto FPC utiliza mucho los archivos .inc internamente, este cambio ya data de antes de que hubiera soporte de Delphi. Como resultado, los paquetes que copian el archivo "define" en cualquier directorio no se compilarán con FPC porque generalmente tienen un tamaño y CRC ligeramente diferentes. Indy (10) es un buen ejemplo de esto.