Red de conocimiento informático - Conocimiento informático - ¿Cómo generar un archivo MAKE automáticamente?

¿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;

}

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:

# -*- 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.