Confundido acerca de configurar script y Makefile.in
configure autoconf (1)
Para comprender realmente las utilidades de autotools, debe recordar de dónde provienen: provienen de un mundo de código abierto donde hay (a) desarrolladores que trabajan desde un repositorio de código fuente (CVS, Git, etc.) y crean un archivo tar o similar que contiene el código fuente y coloca ese archivo en un sitio de descarga, y (b) los usuarios finales que obtienen el archivo tar del código fuente, compilan ese código fuente en su sistema y utilizan el binario resultante. Obviamente, las personas del grupo (a) también compilan el código y usan el binario resultante, pero las personas del grupo (b) no tienen o necesitan, a menudo, todas las herramientas de desarrollo que necesitan las personas del grupo (a).
Por lo tanto, el uso de las herramientas está orientado hacia esta división, donde las personas del grupo (b) no tienen acceso a autoconf, automake, etc.
Cuando se usa autoconf, la gente generalmente ingresa el archivo configure.ac
(entrada a autoconf) en el control de origen, pero no verifica la salida de autoconf, el script de configure
(algunos proyectos sí lo hacen en el script de configure
por supuesto: usted decide) ).
Cuando se usa automake, la gente generalmente verifica el archivo Makefile.am
(entrada para automake) pero no registra la salida de automake: Makefile.in
.
El script de configure
básicamente busca en el sistema varios elementos opcionales que el paquete puede necesitar o no, dónde se pueden encontrar, etc. Una vez que encuentra esta información, puede usarla para convertir varios archivos XXX.in
(normalmente, pero no solo, Makefile.in
) en archivos XXX
(por ejemplo, Makefile
).
Por lo tanto, los pasos generalmente son así: escriba configure.ac
y Makefile.am
y revíselos. Para compilar el proyecto a partir de la verificación del control del código fuente, ejecute autoconf para generar configure
desde configure.ac
. Ejecute automake para generar Makefile.in
desde Makefile.am
. Ejecute configurar para generar Makefile
desde Makefile.in
. Ejecute make para construir el producto.
Cuando desee liberar el código fuente (si está desarrollando un producto de código abierto que hace versiones de código fuente), ejecute autoconf y automake, luego agrupe el código fuente con los archivos configure
y Makefile.in
, para que la gente que construye su la versión del código fuente solo necesita make y un compilador y no necesita autotools.
Debido a que el orden de ejecución de autoconf y automake (y libtool si lo usa) puede ser complicado, existen scripts como autogen.sh y autoreconf, etc. no es necesario / usado por personas que construyen desde el archivo tar de código fuente, etc.
Autoconf y automake a menudo se usan juntos, pero puede usar autoconf sin automake, si desea escribir su propio Makefile.in
.
Actualmente estoy aprendiendo a usar la cadena de herramientas autoconf
/ automake
. Parece que aquí tengo una comprensión general del flujo de trabajo; básicamente, usted tiene un script configure.ac
que genera un archivo de configure
ejecutable. Luego, el usuario final ejecuta el script de configure
generado para generar Makefile
s, de modo que el programa se pueda construir / instalar.
Así que la instalación para un usuario final típico es básicamente:
./configure
make
make install
make clean
Bien, aquí es donde estoy confundido:
Como desarrollador, he notado que el script de configuración generado automáticamente no se ejecuta a veces, y se produce un error con:
config.status: error: cannot find input file: `somedir/Makefile.in''
Esto me confunde, porque pensé que la secuencia de comandos de configuración debía generar el Makefile.in
. Entonces, buscando algunas respuestas en Google, descubrí que esto se puede solucionar con un script autogen.sh
, que básicamente "restablece" el estado del entorno autoconf
. Un script autogen.sh
típico sería algo así como:
aclocal /
&& automake --add-missing /
&& autoconf
Bien vale. Pero como usuario final que ha descargado innumerables archivos comprimidos a lo largo de mi vida, nunca he tenido que usar un script autogen.sh
. Todo lo que hice fue descomprimir el archivo comprimido y hacer la rutina habitual de configuración / realización / instalación / limpieza.
Pero como desarrollador que ahora usa autoconf
, parece que la configure
no se ejecuta a menos que primero se ejecute autogen.sh
. Así que encuentro esto muy confuso, porque pensé que el usuario final no debería tener que ejecutar autogen.sh
.
Entonces, ¿por qué tengo que ejecutar autogen.sh
primero, para que el script de configuración encuentre Makefile.in
? ¿Por qué el script de configuración simplemente no lo genera?