¿Cómo generar un archivo MAKE automáticamente?
El proceso de generación automática de archivos MAKE
Como se muestra en la figura, el proceso de generación de archivos MAKE mediante automake y autoconf (simplificado).
Los pasos para generar un archivo MAKE para los archivos fuente del proyecto y make son los siguientes:
La operación se realiza en el directorio del proyecto que contiene los archivos fuente.
(1). Ejecute el escaneo automático y genere configure.scan.
(2). Modifique configure.scan y cámbiele el nombre a configure.in.
(). 3). Ejecute autoheader y genere el archivo configure.h.in (ahora generalmente cambiado a configure.ac). configure.in se utiliza cuando la macro AC_CONFIG_HEADER() está presente.
(4). Ejecute libtoolize para generar algunos archivos de soporte ltmain.sh. Necesitas usar libtool para generar la biblioteca **** enjoy.
(5). Ejecute allocal para generar aclocal.m4.
(6). Ejecute autoconf para generar la configuración.
(7). Escriba makefie.am para el archivo fuente y makefile.am para cada directorio y subdirectorio que contenga el archivo fuente. La ejecución de automake genera makefile.in, uno para cada subdirectorio que contiene makefile.am.
La opción automake -a parchea los archivos config.guess, config.sub, install-sh, desaparecidos y depcomp. Ejecute ./configure para generar config.status, config.h y makefile. Ejecute make para generar archivos de objetos de archivos intermedios, archivos de biblioteca y, finalmente, un archivo ejecutable.
(11). Ejecute make install para copiar los archivos ejecutables, archivos de biblioteca y archivos de encabezado correspondientes a las ubicaciones correspondientes en el sistema.
Ejemplo de generación automática de archivos MAKE
Este ejemplo*** tiene tres archivos C: main.c, add/add.c y sub/sub.c. c**/
#include
int main(void)
{
printf("%d\n",añadir (sub(100,5),1));
return 0;
}
/* add/add.c */
int add(int x,int y)
{
return x+y;
}
/* sub /sub.c */
int sub(int x,int y)
{
return x-y;
} p>
add.c y sub.c en este ejemplo se compilan como bibliotecas de enlaces dinámicos y luego main.c se vincula con estas dos bibliotecas para generar un archivo ejecutable.
1. Ingrese manualmente configure.in y makefile.am
P: Para generar automáticamente un archivo MAKE, ¿qué archivos necesito ingresar manualmente?
Después de realizar los pasos anteriores, solo es necesario ingresar manualmente dos tipos de archivos, a saber, configure.in y makefile.am.
Modifique manualmente configure.in
Después de ejecutar el escaneo automático, el archivo configure.scan es (los diferentes sistemas pueden ser ligeramente diferentes)
# -*- Autoconf -*-
# Utilice autoconf para procesar este archivo y generar un script de configuración.
AC_PREREQ([2.63])
AC_INIT([NOMBRE-PAQUETE-COMPLETO],[VERSIÓN],[DIRECCIÓN-REPORTE-ERROR])
AC_CONFIG _SRCDIR([main.c])
AC_CONFIG_HEADERS([config.h])
# Verificar programa.
AC_PROG_CC
# Verificar archivos de encabezado. p># Comprueba las definiciones de tipos, estructuras y características del compilador.
# Comprueba las funciones de la biblioteca.
AC_OUTPUT
Cambiar manualmente para configurar .in: p>
# -*- Autoconf -*-
# Procese este archivo con autoconf para producir un script de configuración.
AC_PREREQ([2.63])
AC_INIT( holabb,1.0,[])
AM_INIT_AUTOMAKE(holabb,1.0)
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADERS([config .h])
# Comprobador. Consulta el programa.
AC_PROG_CC
AC_PROG_LIBTOOL
# Verifique el archivo de encabezado.
# Verifique las definiciones de tipos, estructuras y características del compilador.
#Consultar funciones de la biblioteca.
AC_OUTPUT(Makefile add/Makefile sub/Makefile)
Donde se deben usar las macros AC_INIT y AC_ OUTPUT, AC_INIT está al principio y AC_OUTPUT está al final.
AC_INIT: Describe el nombre, versión, etc. del paquete de software.
AC_OUTPUT: Describe la salida del archivo después de ejecutar la configuración del archivo de script de shell generado.
AM_INIT_AUTOMAKE: macro requerida por automake.
AC_PROG_CC: Determina el compilador de C a utilizar. Si la variable de entorno CC no tiene valor, consulte otros compiladores de C como gcc y cc. Establece el valor de la variable CC en el nombre del compilador encontrado.
AC_PROG_LIBTOOL: Verifique LIBTOOL.
AC_CONFIG_SRCDIR([main.c]): ./configure: Verifica el archivo main.c en el directorio especificado.
AC_CONFIG_HEADER([config.h]): ./configure genera el archivo config.h a partir de config.h.in, que es un archivo de encabezado c que contiene muchas macros #define. Al compilar este archivo, la macro -DHAVE_CONFIG_H se utilizará para reemplazar cualquier conjunto de macros de preprocesamiento que se pasaron con -Dmacro.
Por ejemplo, si #AC_CONFIG_HEADER([config.h]) está deshabilitado, el comando para compilar main.c durante make es
gcc -DPACKAGE_NAME=\"hellobb\"- DPACKAGE_TARNAME= \"hola\"- dpackage-version=\"1.0\"-DPACKAGE_STRING=\"holabb\ 1.0\"-DPACKAGE_BUGREPORT=\"\" -DPACKAGE=\"holabb\"-dversion=\"1.0\" -DSTDC_ HEADERS=1 _DHAVE_SYS_TYPES_H=1 -DHAVE_UNISTDLIB_H=1 -DHAVE_STING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\ "./lib s/ \" - I.-I.-g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.c main.c
Si AC_CONFIG_HEADER([ config .h]), entonces el comando para compilar main.c al crear es
gcc -DHAVE_CONFIG_H -I.-g -O2 -MT main.o -MD -MP -MF .deps/main. Tpo -c -o main.o main.c
La macro anterior -Dmacro ya está incluida en config.h, solo necesitamos pasar -DHAVE_CONFIG_H.CONFIG_H al compilador.