Secuencia de Compilación y Ejecución de un Proyecto
A continuación se describe detalladamente el proceso de construcción de un proceso. Es decir, todo lo que ocurre detrás del IDE cuando el proyecto se compila.
La secuencia de pasos es la siguiente para un proyecto cuya compilación es gestionada directamente por ZinjaI es:
- Se verifica qué pasos hay que ejecutar. Las reglas para ello son:
- Un proyecto wxFormBuilder se recompila (es decir, se regeneran los funentes con las ventanas que éste define) si:
- los fuentes de salida no existen
- el archivo auxiliar que indica la fecha de la úlitma compilación (.flg) no existe
- el archivo auxiliar existe, pero tiene fecha de modificación mayor a la de algún archivo de salida (.cpp o .h asociodo)
- Un paso adicional (pestaña Secuencia en las opciones de proyecto) se ejecuta cuando:
- no tiene definido su archivo de salida
- su archivo de salida está definido, pero no existe
- su archivo de salida y sus dependencias estan definidas, y alguno de los archivos de la lista de dependencias tiene fecha de modificación mayor a la del archivo de salida
- Un archivo fuente del proyecto se recompila cuando:
- el archivo objeto asociados no existe
- el archivo se encuentra abierto y ha sido modificado
- alguna de las cabeceras que este archivo incluye (y recursivamente) se encuentran ha sido modificada
- el archivo objeto asociado tiene fecha de modificación posterior a la del fuente
- el archivo fuente y/o el objeto asociado tienen fecha de modificación en el futuro (posterior a la fecha actual)
- se determinó que se debía ejecutar algun paso adicional que tiene por archivo de salida a dicho fuente
- el archivo estaba asociado a una biblioteca, pero ya no, o al contrario (sólo en GNU/Linux dado que los parámetros para la compilación pueden cambian).
- Una biblioteca se reenlaza cuando:
- tiene definida la opción para forzar el reenlazado en su configuración
- se alteró la comfiguración de la misma desde el cuadro de configuración de la misma (por ejemplo, cambió de estática a dinámica)
- se determinó previamente que alguno de los fuentes que la componen debe ser recompilado
- alguno de los objetos que la componen tiene fecha de modificación más reciente
- El ícono para el ejecutable (solo en Microsoft Windows) se recompila (mediante un archivo de recursos) cuando:
- no existe el archivo de recursos (temporal autogenerado por ZinjaI) y/o no existe su correspondiente archivo objeto
- el archivo del ícono tiene fecha de modificación más reciente que el archivo objeto del recurso
- el ícono definido para la aplicación no es el mismo que el indicado en el archivo de recursos
- El ejecutable se reenlaza cuando:
- el ejecutable no existe
- se especificó que debía reenlazarse obligadamente (pestaña Enlazado del cuadro de configuración de proyecto)
- se determinó anteriormente que alguno de los fuentes que lo generan debía recompilarse
- se determinó anteriormente que alguna de las bibliotecas que genera el proyecto debía reenlazarse
- se determinó anteriormente que debía ejecutarse alguno de los pasos adicionales previos al enlazado del ejecutable
- alguno de los objetos que lo componen tiene fecha de modificación más reciente
- el archivo objeto del ícono (solo en Microsoft Windows) debe ser regenerado, o tiene fecha de modificación más reciente
- Si hay algún paso (compilación, enlazado, adicional, etc) que deba ejecutarse, lo hacen en el siguiente orden:
- se analiza la configuración del proyecto. Es decir, se componen los argumentos que se utilizarán al compilar o ensamblar: esto incluye parsear todos los campos de la configuración de proyecto, ejecutar los subcomandos (ingresados entre acentos, ej: `wx-config --cppflags`) y reemplazar las variables (${MINGW_DIR}, ${TEMP_DIR}, etc).
- se recompilan los proyectos de wxFormBuilder
- se ejecutan los pasos adicionales ubicados antes de la compilación de fuentes del proyecto
- se compilan los fuentes del proyecto, tanto los destinados a bibliotecas, como los que van directo al ejecutable
- se ejecutan los pasos adicionales ubicados entre la compilación de los fuentes y la generación de bibliotecas
- se enlazan las bibliotecas que debe generar el proyecto: para este enlazado sólo se utilizan los argumentos definidos para dicha biblioteca, no los generales del proyecto
- se ejecutan los pasos adicionales ubicados entre la generación de bibliotecas y el enlazado el ejecutable
- se enlaza el ejecutable (a menos que el proyecto genere sólo bibliotecas): para conformar el ejecutable se enlazan todos los fuentes que no estén asociados a ninguna biblioteca y los archivos de salida de todas las bibliotecas que tengan al menos un fuente asociado
- se ejecutan los pasos adicionales definidos luego de el enlazado del ejecutable
Siempre puede analizar qué comandos en verdad se ejecutaron tras una compilación haciendo click con el botón derecho del mouse en el Arbol de Resultados de la Compilación y seleccionando la opción Abrir última salida del menú contextual. Aquí observará los comandos ejecutados (precedidos por el signo >) y la salida que cada uno de ellos arrojó a continuación.
Nota: Un proyecto que utiliza un toolchain basado en una herramienta externa (script de compilación o Makefile por ejemplo), delega todo el proceso de compilación al mismo, por lo que ninguna de las etapas que se describen a continuación aplican en ese caso. Antes de ejecutar el script o la herramienta que corresponda al toolchain, ZinjaI define algunas variables de entorno para comunicarle al mismo valores de la configuración del proyecto que puedan ser de utilidad. Estas son: "Z_PROJECT_PATH", que contiene la carpeta del proyecto; "Z_PROJECT_BIN", que contiene la ubicación del ejecutable; y "Z_TEMP_DIR", que contiene la ruta del directorio de temporales.