GNU/Linux >> Tutoriales Linux >  >> Linux

Introducción a las herramientas automáticas de GNU

¿Alguna vez ha descargado el código fuente de un proyecto de software popular que requería que escribiera el casi ritual ./configure; hacer &&hacer instalar secuencia de comandos para compilarlo e instalarlo? Si es así, ha utilizado GNU Autotools. Si alguna vez ha examinado algunos de los archivos que acompañan a un proyecto de este tipo, es probable que también le haya aterrorizado la aparente complejidad de dicho sistema de compilación.

¡Buenas noticias! GNU Autotools es mucho más simple de configurar de lo que cree, y es GNU Autotools el que genera esos archivos de configuración de 1000 líneas para usted. Sí, puede escribir 20 o 30 líneas de código de instalación y obtener las otras 4000 gratis.

Autoherramientas en el trabajo

La terminal de Linux

  • Los 7 mejores emuladores de terminal para Linux
  • 10 herramientas de línea de comandos para el análisis de datos en Linux
  • Descargar ahora:hoja de referencia de SSH
  • Hoja de trucos de comandos avanzados de Linux
  • Tutoriales de línea de comandos de Linux

Si eres un usuario nuevo en Linux que busca información sobre cómo instalar aplicaciones, ¡no tienes que leer este artículo! Le invitamos a leerlo si desea investigar cómo se construye el software, pero si solo está instalando una nueva aplicación, lea mi artículo sobre la instalación de aplicaciones en Linux.

Para los desarrolladores, Autotools es una forma rápida y fácil de administrar y empaquetar el código fuente para que los usuarios puedan compilar e instalar software. Autotools también es compatible con los principales formatos de empaquetado, como DEB y RPM, por lo que los encargados del mantenimiento de los repositorios de software pueden preparar fácilmente un proyecto creado con Autotools.

Autotools funciona en etapas:

  1. Primero, durante ./configure Paso, Autotools escanea el sistema host (la computadora en la que se ejecuta) para descubrir la configuración predeterminada. La configuración predeterminada incluye dónde se encuentran las bibliotecas de soporte y dónde se debe colocar el nuevo software en el sistema.
  2. Luego, durante el hacer paso, Autotools crea la aplicación, generalmente convirtiendo el código fuente legible por humanos en lenguaje de máquina.
  3. Finalmente, durante la instalación paso, Autotools copia los archivos que creó en las ubicaciones adecuadas (según lo detectado durante la etapa de configuración) en su computadora.

Este proceso parece simple, y lo es, siempre y cuando uses Autotools.

La ventaja de Autotools

GNU Autotools es una pieza de software grande e importante que la mayoría de nosotros damos por sentado. Junto con GCC (GNU Compiler Collection), Autotools es el andamiaje que permite construir e instalar software libre en un sistema en ejecución. Si está ejecutando un sistema POSIX, no es una subestimación decir que la mayor parte de su sistema operativo existe como software ejecutable en su computadora debido a estos proyectos.

En el caso probable de que su proyecto favorito no sea un sistema operativo, puede suponer que Autotools es excesivo para sus necesidades. Pero, a pesar de su reputación, Autotools tiene muchas funciones pequeñas que pueden beneficiarlo, incluso si su proyecto es una aplicación relativamente simple o una serie de secuencias de comandos.

Portabilidad

En primer lugar, Autotools tiene en mente la portabilidad. Si bien no puede hacer que su proyecto funcione en todas las plataformas POSIX (eso depende de usted, como codificador), Autotools puede garantizar que los archivos que ha marcado para la instalación se instalen en las ubicaciones más sensibles en una plataforma conocida. Y debido a Autotools, es trivial para un usuario avanzado personalizar y anular cualquier valor no óptimo, de acuerdo con su propio sistema.

Con Autotools, todo lo que necesita saber es qué archivos deben instalarse en qué ubicación general. Se encarga de todo lo demás. No más scripts de instalación personalizados que fallan en cualquier sistema operativo no probado.

Embalaje

Autotools también está bien soportado. Entregue un proyecto con Autotools a un empaquetador de distribución, ya sea que esté empaquetando un RPM, DEB, TGZ o cualquier otra cosa, y su trabajo es simple. Las herramientas de empaquetado conocen Autotools, por lo que es probable que no se necesiten parches, piratería o ajustes. En muchos casos, incluso se puede automatizar la incorporación de un proyecto de Autotools en una canalización.

Cómo usar Autotools

Para usar Autotools, primero debe tener Autotools instalado. Su distribución puede proporcionar un paquete destinado a ayudar a los desarrolladores a crear proyectos, o puede proporcionar paquetes separados para cada componente, por lo que es posible que deba investigar un poco en su plataforma para descubrir qué paquetes necesita instalar.

Los componentes principales de Autotools son:

  • fabricación automática
  • configuración automática
  • hacer

Si bien es probable que necesite instalar el compilador (GCC, por ejemplo) requerido por su proyecto, Autotools funciona bien con scripts o activos binarios que no necesitan compilarse. De hecho, Autotools puede ser útil para tales proyectos porque proporciona un hacer desinstalar secuencia de comandos para una fácil eliminación.

Una vez que haya instalado todos los componentes, es hora de ver la estructura de los archivos de su proyecto.

Estructura del proyecto Autotools

GNU Autotools tiene expectativas muy específicas, y la mayoría de ellas probablemente le resulten familiares si descarga y compila el código fuente con frecuencia. Primero, se espera que el código fuente en sí esté en un subdirectorio llamado src .

Su proyecto no tiene que seguir todas estas expectativas, pero si coloca archivos en ubicaciones no estándar (desde la perspectiva de Autotools), tendrá que hacer ajustes para eso en su Makefile más adelante.

Además, estos archivos son necesarios:

  • NOTICIAS
  • LÉAME
  • AUTORES
  • Registro de cambios

No tiene que usar activamente los archivos, y pueden ser enlaces simbólicos a un documento monolítico (como README.md ) que engloba toda esa información, pero deben estar presentes.

Configuración de Autotools

Cree un archivo llamado configure.ac en el directorio raíz de su proyecto. Este archivo es utilizado por autoconf para crear la configuración script de shell que los usuarios ejecutan antes de construir. El archivo debe contener, como mínimo, el AC_INIT y AC_OUTPUT Macros M4. No necesita saber nada sobre el lenguaje M4 para usar estas macros; ya están escritos para usted, y todos los relevantes para Autotools están definidos en la documentación.

Abra el archivo en su editor de texto favorito. El AC_INIT La macro puede consistir en el nombre del paquete, la versión, una dirección de correo electrónico para informes de errores, la URL del proyecto y, opcionalmente, el nombre del archivo TAR de origen.

La AC_OUTPUT macro es mucho más simple y no acepta argumentos.

AC_INIT([penguin], [2019.3.6], [[email protected]])
AC_OUTPUT

Si tuviera que ejecutar autoconf en este punto, una configuración la secuencia de comandos se generaría a partir de su configure.ac archivo, y se ejecutaría con éxito. Sin embargo, eso es todo lo que haría, porque todo lo que ha hecho hasta ahora es definir los metadatos de su proyecto y solicitar la creación de un script de configuración.

Las próximas macros que debe invocar en su configure.ac file son funciones para crear un Makefile. Un Makefile le dice al make Comando qué hacer (por lo general, cómo compilar y vincular un programa).

Las macros para crear un Makefile son AM_INIT_AUTOMAKE , que no acepta argumentos, y AC_CONFIG_FILES , que acepta el nombre que desea llamar a su archivo de salida.

Finalmente, debe agregar una macro para tener en cuenta el compilador que necesita su proyecto. La macro que usa obviamente depende de su proyecto. Si su proyecto está escrito en C++, la macro adecuada es AC_PROG_CXX , mientras que un proyecto escrito en C requiere AC_PROG_CC , y así sucesivamente, como se detalla en la sección Creación de programas y bibliotecas en la documentación de Autoconf.

Por ejemplo, podría agregar lo siguiente para mi programa C++:

AC_INIT([penguin], [2019.3.6], [[email protected]])
AC_OUTPUT
AM_INIT_AUTOMAKE
AC_CONFIG_FILES([Makefile])
AC_PROG_CXX

Guarda el archivo. Es hora de pasar al Makefile.

Generación de Makefile de Autotools

Los archivos MAKE no son difíciles de escribir manualmente, pero Autotools puede escribir uno por usted, y el que genera usará las opciones de configuración detectadas durante ./configure paso, y contendrá muchas más opciones de las que pensaría incluir o desearía escribir usted mismo. Sin embargo, Autotools no puede detectar todo lo que su proyecto requiere para construir, por lo que debe agregar algunos detalles en el archivo Makefile.am , que a su vez es utilizado por automake al construir un Makefile.

Makefile.am utiliza la misma sintaxis que un Makefile, por lo que si alguna vez ha escrito un Makefile desde cero, este proceso le resultará familiar y sencillo. A menudo, un Makefile.am file solo necesita unas pocas definiciones de variables para indicar qué archivos se van a compilar y dónde se van a instalar.

Variables que terminan en _PROGRAMS identificar el código que se va a construir (esto generalmente se considera el código principal) objetivo; es la razón principal por la que existe Makefile). Automake reconoce otros primarios, como _SCRIPTS , _DATOS , _BIBLIOTECAS y otras partes comunes que componen un proyecto de software.

Si su aplicación se compila literalmente durante el proceso de compilación, entonces la identifica como un programa binario con bin_PROGRAMS y luego haga referencia a cualquier parte del código fuente necesario para construirlo (estas partes pueden ser uno o más archivos para compilar y vincular juntos) usando el nombre del programa como prefijo de la variable:

bin_PROGRAMS = penguin
penguin_SOURCES = penguin.cpp

El objetivo de bin_PROGRAMS está instalado en el bindir , que es configurable por el usuario durante la compilación.

Si su aplicación no está realmente compilada, entonces su proyecto no necesita un bin_PROGRAMS variable en absoluto. Por ejemplo, si su proyecto es un script escrito en Bash, Perl o un lenguaje interpretado similar, defina un _SCRIPTS variable en su lugar:

bin_SCRIPTS = bin/penguin

Automake espera que las fuentes estén ubicadas en un directorio llamado src , por lo que si su proyecto utiliza una estructura de directorio alternativa para su diseño, debe indicarle a Automake que acepte código de fuentes externas:

AUTOMAKE_OPTIONS = foreign subdir-objects

Finalmente, puede crear cualquier regla de Makefile personalizada en Makefile.am y se copiarán palabra por palabra en el Makefile generado. Por ejemplo, si sabe que es necesario reemplazar un valor temporal en su código fuente antes de que continúe la instalación, puede crear una regla personalizada para ese proceso:

all-am: penguin
        touch bin/penguin.sh
       
penguin: bin/penguin.sh
        @sed "s|__datadir__|@datadir@|" $< >bin/$@

Un truco particularmente útil es extender la limpieza existente objetivo, al menos durante el desarrollo. El limpiar El comando generalmente elimina todos los archivos de compilación generados con la excepción de la infraestructura de Automake. Está diseñado de esta manera porque la mayoría de los usuarios rara vez quieren limpiar para borrar los archivos que facilitan la construcción de su código.

Sin embargo, durante el desarrollo, es posible que desee un método para devolver su proyecto de manera confiable a un estado relativamente no afectado por Autotools. En ese caso, es posible que desee agregar esto:

clean-local:
        @rm config.status configure config.log
        @rm Makefile
        @rm -r autom4te.cache/
        @rm aclocal.m4
        @rm compile install-sh missing Makefile.in

Hay mucha flexibilidad aquí, y si aún no está familiarizado con Makefiles, puede ser difícil saber cuál es su Makefile.am necesidades. Lo más necesario es un objetivo principal, ya sea un programa binario o un script, y una indicación de dónde se encuentra el código fuente (ya sea a través de un _SOURCES variable o usando AUTOMAKE_OPTIONS para decirle a Automake dónde buscar el código fuente).

Una vez que haya definido esas variables y configuraciones, puede intentar generar sus scripts de compilación como se ve en la siguiente sección y ajustar cualquier cosa que falte.

Generación de scripts de compilación de Autotools

Ha construido la infraestructura, ahora es el momento de dejar que Autotools haga lo que mejor sabe hacer:automatizar las herramientas de su proyecto. La forma en que el desarrollador (usted) interactúa con Autotools es diferente de cómo lo hacen los usuarios que crean su código.

Los constructores generalmente usan esta conocida secuencia:

$ ./configure
$ make
$ sudo make install

Sin embargo, para que ese encantamiento funcione, usted, como desarrollador, debe arrancar la infraestructura de construcción. Primero, ejecute autoreconf para generar el script de configuración que invocan los usuarios antes de ejecutar make . Use el –instalar opción para incorporar archivos auxiliares, como un enlace simbólico a depcomp , un script para generar dependencias durante el proceso de compilación y una copia de la compilación script, un contenedor para que los compiladores tengan en cuenta la variación de sintaxis, etc.

$ autoreconf --install
configure.ac:3: installing './compile'
configure.ac:2: installing './install-sh'
configure.ac:2: installing './missing'

Con este entorno de creación de desarrollo, puede crear un paquete para la distribución del código fuente:

$ make dist

El distancia target es una regla que obtienes "gratis" de Autotools.

Es una característica que se integra en el Makefile generado desde tu humilde Makefile.am configuración. Este objetivo produce un tar.gz archivo que contiene todo su código fuente y toda la infraestructura esencial de Autotools para que las personas que descargan el paquete puedan construir el proyecto.

En este punto, debe revisar detenidamente el contenido del archivo para asegurarse de que contenga todo lo que pretende enviar a sus usuarios. Por supuesto, también deberías intentar crearlo tú mismo:

$ tar --extract --file penguin-0.0.1.tar.gz
$ cd penguin-0.0.1
$ ./configure
$ make
$ DESTDIR=/tmp/penguin-test-build make install

Si su compilación es exitosa, encontrará una copia local de su aplicación compilada especificada por DESTDIR (en el caso de este ejemplo, /tmp/penguin-test-build ).

$ /tmp/example-test-build/usr/local/bin/example 
hello world from GNU Autotools

Hora de usar Autotools

Autotools es una gran colección de scripts para un proceso de lanzamiento predecible y automatizado. Este conjunto de herramientas puede ser nuevo para usted si está acostumbrado a los desarrolladores de Python o Bash, pero probablemente valga la pena aprenderlo por la estructura y la adaptabilidad que brinda a su proyecto.

Y Autotools tampoco es solo para código. Autotools se puede usar para crear proyectos de Docbook, para mantener los medios organizados (uso Autotools para mis lanzamientos de música), proyectos de documentación y cualquier otra cosa que pueda beneficiarse de los objetivos de instalación personalizables.


Linux
  1. Una introducción al editor vi

  2. Una introducción al comando diff

  3. Una introducción a Docker

  4. Introducción a las imágenes de Docker

  5. Introducción a Docker

Una introducción a Virtual Machine Manager

Una introducción a bpftrace para Linux

Introducción a Python Pandas

Introducción al sistema de archivos de Linux

Una introducción al navegador Vivaldi en Linux

Una introducción a los hechos de Ansible