Pregunta

Copié libtool en el árbol fuente de mi programa para distribuirlo con el programa. Pero cuando ejecuto 'make distclean', libtool se elimina con el resto del resto de los archivos generados. ¿Cómo evito que eso suceda?

Intenté poner EXTRA_DIST = libtool en Makefile.am pero eso no funciona.

Esto es básicamente lo que parece mi configure.ac.

AC_PREREQ(2.53)
AC_INIT( [program], [0.16], [program] )
AC_CONFIG_SRCDIR([src/c/program.c])
AC_CONFIG_HEADER([config.h])
AC_CONFIG_AUX_DIR(build-aux)
AM_INIT_AUTOMAKE( [-Wall -Werror foreign] )

m4_include(ax_pkg_swig.m4)

# Checks for programs.
AC_PROG_CC
AC_PROG_LIBTOOL
AC_ENABLE_SHARED
AC_PROG_SWIG

# Checks for libraries.

# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h string.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_SIZE_T

# Checks for library functions.
AC_REPLACE_FNMATCH
AC_FUNC_MALLOC
AC_FUNC_STAT
AC_CHECK_FUNCS([regcomp strdup strtoull])

AC_CONFIG_FILES([
    Makefile
    src/c/Makefile
    src/perl/Makefile
    src/verilog/Makefile
])
AC_OUTPUT
¿Fue útil?

Solución

Se supone que no debe copiar libtool en el directorio de su programa a mano. Ejecutas libtoolize en tu script bootstrap, que maneja esto por ti. Supongo que está haciendo más que solo copiar libtool para usted, como informar a automake que no debe eliminar el archivo. Aquí hay un script de arranque de muestra:

#!/bin/sh
aclocal -I config &&
    libtoolize --force --copy &&
    autoheader &&
    automake --add-missing --copy --foreign &&
    autoconf &&
    ./configure -C "$@"

Este script se denomina tradicionalmente bootstrap o autogen.sh . Estos nombres no son universales, solo que casi. Hace solo unos días, me encontré con un proyecto usando bootstrap.sh , por ejemplo.

En gran medida, el nombre del guión es una cuestión de moda y estilo. No es del todo superficial porque parte del estilo moderno es alejarse de ejecutar configure al final del script. bootstrap es el nombre más nuevo, por lo que es menos probable que un script llamado ejecute configure al final. El Capítulo 8 del Autobook implica que este también es el caso, pero yo me he encontrado con contraejemplos. (Es decir, proyectos con un script autogen.sh que no llama a configure , y proyectos con un script bootstrap que sí lo hace).

En mi opinión, la cuestión de si incluir el paso configure al final se reduce a qué tan típicos son los casos de uso de su proyecto. Si casi todos los que necesitan arrancar el árbol de compilación de su proyecto aceptarán las banderas estándar configure definidas en el script bootstrap, o tal vez agreguen uno o dos simples, está bien ejecutar configure automáticamente. Es mejor hacer un paso manual por separado si mucha gente necesita hacer una personalización intensa. Un ejemplo es cuando muchos de sus usuarios están compilación cruzada su proyecto. Las formas de pedirle a configure que haga esto son bien conocidas, mientras que alguien tendría que leer el código de su script de arranque para descubrir cómo pasar las opciones a la configure incrustada comando.

Seguramente tendrá que personalizar este script para las necesidades de su proyecto. Lo más importante para dejar como está es el orden de las operaciones. Los Autotools son sensibles a eso. Puede que tenga que cambiar los indicadores dados los comandos; el -I config en el comando aclocal no es universal, por ejemplo. Es aún más probable que necesite agregar pasos al proceso, ya sea en torno a estos pasos comunes, o tal vez incluso intercalarlos con ellos.

En cuanto a el Opción autoreconf , aún no me he hecho fan. Encuentro que sus suposiciones integradas se descomponen en todos mis proyectos, de alguna manera. Si su proyecto es un proyecto con estilo GNU estándar de pantano, puede funcionar para usted.

Por cierto, la macro AC_PROG_LIBTOOL es obsoleto . Debería usar LT_INIT en su lugar.

Otros consejos

En realidad, no es necesario llamar a todo eso local y libtoolize y autoheader y ...

Solo llame

$ autoreconf -i

y autoreconf ejecutará aclocal, libtoolize (si hay macros libtool en configure.ac), automake (si configure.ac involucra automake) y autoconf. Todos los archivos respectivos que deben agregarse a su árbol de origen se copiarán allí, entre ellos ltmain.sh.2

Normalmente agrego algo de verbosidad (-v) y en lugar de simplemente copiar los archivos, los enlace simbólicamente, lo que resulta en mi llamada estándar de

$ autoreconf -vis

El " libtool " archivo generado por un " configurar " La ejecución es específica del sistema en el que se realizó la ejecución de configuración y, por lo tanto, por supuesto, se limpiará nuevamente mediante "make distclean".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top