GNU/Linux >> Tutoriales Linux >  >> Linux

El comando make de Linux explicado con ejemplos

El hacer command en Linux es uno de los comandos más utilizados por los administradores de sistemas y los programadores. Si bien ayuda a los administradores a compilar e instalar muchas utilidades de código abierto a través de la línea de comandos, los programadores lo usan para administrar la compilación de sus proyectos grandes y complicados. En este artículo, discutiremos el funcionamiento interno del make comando junto con algunos ejemplos prácticos.

Cómo hacer El comando funciona

Para aquellos que no lo saben, el comando make acepta objetivos como argumentos de línea de comando. Estos objetivos generalmente se especifican en un archivo llamado 'Makefile', que también contiene la acción asociada correspondiente a los objetivos. Para obtener más información, lea nuestra serie de artículos sobre cómo funcionan los Makefiles.

Cuando el comando make se ejecuta por primera vez, escanea el Makefile para encontrar el objetivo (suministrado) y luego lee sus dependencias. Si estas dependencias son objetivos en sí mismas, escanea el Makefile en busca de estos objetivos y genera sus dependencias (si las hay) y luego las genera. Una vez que se compilan las dependencias principales, se compila el objetivo principal (que se pasó al comando make).

Ahora, supongamos que realiza un cambio en un solo archivo fuente y ejecuta el comando make nuevamente, solo compilará los archivos objeto correspondientes a ese archivo fuente y, por lo tanto, ahorrará mucho tiempo en la compilación del ejecutable final.

hacer ejemplos de comandos

Estos son los detalles del entorno de prueba utilizado para este artículo:

  • SO:Ubuntu 13.04
  • Concha - Bash 4.2.45
  • Aplicación:GNU Make 3.81

Los siguientes son los contenidos del proyecto:

$ ls
anotherTest.c Makefile test.c test.h

y aquí están los contenidos del Makefile:

all: test

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

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

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

clean:
        rm -rf *.o test

Ahora, echemos un vistazo a algunos de los ejemplos del uso del comando make en Linux.

1) Un ejemplo sencillo

Para compilar el proyecto, puede simplemente usar 'make' o puede usar el objetivo 'all' con el comando make.

$ make
gcc -c -Wall test.c
gcc -c -Wall anotherTest.c
gcc -Wall test.o anotherTest.o -o test

Entonces puede ver que el comando make primero crea las dependencias y luego el destino real.

Si observa el contenido del directorio, habrá archivos .o y archivos ejecutables en él:

$ ls
anotherTest.c anotherTest.o Makefile test test.c test.h test.o

Ahora, supongamos que realiza algún cambio en test.c y vuelve a compilar el proyecto con make :

$ make
gcc -c -Wall test.c
gcc -Wall test.o anotherTest.o -o test

Entonces puede ver que solo test.o se vuelve a compilar, mientras que anotherTest.o no se vuelve a compilar.

Ahora, para limpiar todos los archivos de objetos junto con el ejecutable de 'prueba', puede usar el objetivo 'limpiar':

$ make clean
rm -rf *.o test

$ ls
anotherTest.c Makefile test.c test.h

Entonces puede ver que todos los archivos .o y el ejecutable 'test' fueron eliminados.

2) Siempre haga todos los objetivos a través de la opción -B

A estas alturas, probablemente sepa que el comando make no compila los archivos que no han cambiado desde la última vez. Pero, si desea anular el comportamiento predeterminado de la marca, puede usar la opción -B.

Aquí hay un ejemplo:

$ make
make: Nothing to be done for `all'.

$ make -B
gcc -c -Wall test.c
gcc -c -Wall anotherTest.c
gcc -Wall test.o anotherTest.o -o test

Entonces puede ver que mientras el comando 'make' no compiló ningún archivo, 'make -B' compiló a la fuerza todos los objetos junto con el ejecutable final.

3) Imprimir información de depuración usando la opción -d

Si desea una descripción detallada de lo que hace realmente el comando make cuando se ejecuta, use la opción -d.

Aquí hay un ejemplo:

$ make -d | more
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-pc-linux-gnu
Reading makefiles...
Reading makefile `Makefile'...
Updating makefiles....
Considering target file `Makefile'.
Looking for an implicit rule for `Makefile'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.o'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.c'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.cc'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.C'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.cpp'.
Trying pattern rule with stem `Makefile'.
--More--

Es una salida larga. Puedes ver que usé el más Comando para ver la salida página por página. Tienes que verlo por ti mismo para tener una mejor idea de los detalles que esta opción es capaz de producir.

4) Cambia el directorio usando la opción -C

Puede proporcionar una ruta de directorio diferente al comando make, al que cambiaría antes de buscar un Makefile.

Aquí hay un ejemplo. Suponga que actualmente se encuentra en este directorio:

$ ls
file file2 frnd frnd1.cpp log1.txt log3.txt log5.txt
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt

Pero desea ejecutar make con el Makefile guardado en ../make-dir/. Así que esto es lo que tienes que hacer:

$ make -C ../make-dir/
make: Entering directory `/home/himanshu/practice/make-dir'
make: Nothing to be done for `all'.
make: Leaving directory `/home/himanshu/practice/make-dir'

Entonces puede ver que el comando make cambió al directorio especificado, se ejecutó allí y luego volvió.

5) Trata cualquier otro archivo como 'Makefile' a través de la opción -f

Si desea cambiar el nombre de su Makefile a digamos 'my_makefile' o cualquier otro nombre, y quiere que el comando make lo trate como el 'Makefile' predeterminado, puede usar la opción -f para esto.

Aquí hay un ejemplo:

make -f my_makefile

De esta forma, el comando make seleccionará y escaneará my_makefile en lugar de Makefile.


Linux
  1. Comando de apagado de Linux explicado con ejemplos

  2. Comando nslookup de Linux explicado con ejemplos

  3. Comando Traceroute de Linux, explicado con ejemplos

  4. Comando JQ en Linux con ejemplos

  5. Comando whoami en Linux explicado con ejemplos

Comando Bash Echo explicado con ejemplos en Linux

Comando Tr en Linux explicado con ejemplos

w Comando explicado con ejemplos en Linux

Explicación del comando tee de Linux (con ejemplos)

Explicación del comando csplit de Linux (con ejemplos)

Comando make de Linux con ejemplos