LINUX

Una guía para principiantes para entender los Makefiles en Linux

Como principiantes, la mayoría de los programadores de C/C++ compilan sus programas en la línea de comandos de Linux ejecutando los comandos del compilador gcc o g++. Pero a medida que sus proyectos comienzan a crecer, compilar con un solo comando no sigue siendo fácil ni eficiente.

Como solución a todos los problemas de compilación, debe comprender el concepto de un archivo MAKE. Este tema se tratará en una serie de artículos y en esta primera parte, discutiremos los conceptos básicos de los archivos MAKE en Linux.

Problemas con el método de pedido único

Digamos que su proyecto consta de los siguientes tres archivos guardados en un directorio:

test.c
anotherTest.c
test.h

Como principiante, ejecutará el siguiente comando una y otra vez para compilar su proyecto:

gcc -Wall test.c anotherTest.c -o test -I.

Esto está bien siempre que su proyecto solo contenga algunos archivos. Ahora digamos que su proyecto crece y ahora contiene 10 archivos fuente y de encabezado más. ¿Qué harás entonces?

Muchos argumentarían que extenderán el comando existente agregando los nombres de esos nuevos archivos. Pero, ¿qué sucede si de alguna manera pierde este comando o cambia a otro sistema? ¿Va a escribir el comando largo de nuevo?

Además, suponga que su proyecto se convierte en un proyecto grande que contiene cientos de archivos y tarda de 5 a 10 minutos en compilarse. Ahora suponga que agrega un simple impresión línea de depuración en uno de los archivos .c, pero use un solo comando para volver a compilar. ¿No sería ineficiente que un programa tardara 10 minutos en compilarse incluso si se cambia/agrega una sola línea a uno de los archivos fuente?

Bueno, la solución es usar Makefiles.

Makefiles

Un archivo MAKE es un archivo especial (llamado simplemente «archivo MAKE») que consta de objetivos, dependencias y comandos, estructurado de una manera que facilita al programador la compilación del programa.

En términos sencillos, aquí hay una sintaxis básica de archivo MAKE:

target: dependencies
[tab] command

Entonces, si queremos crear un archivo MAKE muy simple para nuestro proyecto de ejemplo (enumerado en la última sección), sería algo como:

all: test

test: test.o anotherTest.o
    gcc -Wall test.c anotherTest.c -o test -I.

test.o: test.c
    gcc -Wall -c test.c -I.

anotherTest.o: anothertest.c
    gcc -Wall -c anotherTest.c -I.

Esto puede parecer un poco complicado para un principiante, pero si observa detenidamente, solo contiene grupos de objetivos, dependencias y comandos.

  • El objetivo «todos» no es más que un objetivo de archivo MAKE predeterminado.
  • La «prueba» de destino depende de test.o y anotherTest.o y puede generarse mediante el comando que se menciona a continuación.
  • De manera similar, los objetivos «test.o» y «anotherTest.o» dependen de los archivos .c correspondientes y pueden generarse mediante los comandos respectivos que se mencionan a continuación.

Ahora, uno se preguntaría, ¿cómo usar estos objetivos? Bueno, son utilizados por el comando «hacer». Este comando acepta un objetivo como argumento y busca un archivo llamado «Makefile» para comprender cómo construir ese objetivo. Por ejemplo, si especifica el siguiente comando:

make test

Luego, este comando escaneará el Makefile, construirá (si es necesario) sus dependencias Prueba y luego ejecute el comando para construir Prueba per se.

De manera similar, si desea eliminar todos los objetos basura o ejecutables antes de cada ciclo de compilación, puede agregar un destino limpio al Makefile.

Aquí hay un ejemplo:

all: test

test: test.o anotherTest.o
    gcc -Wall test.c anotherTest.c -o test -I.

test.o: test.c
    gcc -Wall -c test.c -I.

anotherTest.o: anothertest.c
    gcc -Wall -c anotherTest.c -I.

clean:
    rm -rf *o test

Así que puedes simplemente emitir el siguiente comando:

make clean

para limpiar todos los archivos de objetos adicionales y Prueba archivo ejecutable, antes de iniciar un ciclo de compilación.

La belleza de este comando es que sabe qué archivos han cambiado desde la última vez que se ejecutó y crea solo las dependencias que se necesitan. Entonces la combinación de Hacer lo El comando y Makefile no solo facilita al programador la compilación del proyecto, sino que también minimiza el tiempo total de compilación.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar