GNU/Linux >> Tutoriales Linux >  >> Linux

¿Puedes hacerlo? Compile programas C en Linux usando el comando Make

Cuando instala cualquier software desde la fuente, normalmente ejecuta comandos como:"hacer", "hacer instalar", “make clean”, etc. ¿Se ha preguntado qué están haciendo realmente todos estos comandos make? Claro, sabemos que está intentando compilar e instalar el software. Pero, ¿por qué hacer? ¿Qué hace realmente?

Para compilar un solo programa en C, el comando cc es muy útil. Para compilar varios programas en C, la utilidad Make es muy útil.

Además, a los programadores de C y administradores de sistemas les resultará útil automatizar las tareas relacionadas con la compilación utilizando la utilidad make. En este artículo, repasemos cómo usar el comando make.

1. Crear el Makefile para una compilación simple

Supongamos que tiene el archivo de programa C de muestra llamado helloworld.c. Usando el comando cc, normalmente lo compilaría como se muestra a continuación.

$ cc -o helloworld helloworld.c

Si bien no necesita usar make para compilar un solo programa, el siguiente ejemplo le dará una idea de cómo usar make. Cree un archivo MAKE como se muestra a continuación.

$ vim makefile
helloworld : helloworld.c
	cc -o helloworld helloworld.c

Ejecute make para crear el ejecutable helloworld como se muestra a continuación.

$ make helloworld

(or)

$ make

Dado que el archivo MAKE contiene solo un destino "helloworld", también puede llamar al comando make sin ningún argumento como se muestra arriba. "make".

Asegúrese de que tanto el archivo MAKE como el código fuente estén presentes en el mismo directorio; de lo contrario, especifique la ruta respectiva de los archivos fuente en el archivo MAKE.

De forma predeterminada, el comando make espera que el nombre del archivo make sea Makefile o archivo make . Si el nombre del archivo make es diferente a cualquiera de estos dos, debe especificarlo en el comando make usando la opción -f como se muestra a continuación.

$ make -f sample.txt

Para aquellos que son nuevos en C, lea el artículo del programa C Hello World.

2. Crear el Makefile para compilar más de un archivo

Para la compilación de archivos múltiples, usemos tres archivos:getname.c, getaccno.c y main.c.

Basándonos en estos tres archivos *.c, creemos un ejecutable llamado "gettinto".

Usando el comando cc, normalmente haría la compilación como se muestra a continuación.

$ cc -o getinfo main.c getname.c getaccno.c header.h

También puede compilar los archivos *.c individuales como se muestra a continuación y finalmente crear el ejecutable "getinfo" como se muestra a continuación.

$ cc -c getname.c
$ cc -c getaccno.c
$ cc -c main.c
$ cc -o getinfo main.o getname.o getaccno.o header.h

Usando nuestra utilidad de creación amigable, puede hacer esto de manera efectiva como se muestra a continuación.

$ vim makefile
getinfo:getname.o getaccno.o main.o header.h 
	cc -o getinfo getname.o getaccno.o main.o header.h 
main.o:main.c 
	cc -c main.c 
getaccno.o:getaccno.c 
	cc -c getaccno.c 
getname.o:getname.c 
	cc -c getname.c 

Finalmente, ejecute el comando make como se muestra a continuación.

$ make getinfo 

Nota: Cada vez que se invoca el comando make, verifica y compila solo el archivo que se modifica. Esto es enorme para los programadores de C, donde normalmente tienen varios archivos C y compilan todo el proyecto varias veces durante la fase de desarrollo.

También puede usar gdb para depurar programas C.

3. Agregar objetivo para el proceso de limpieza

Dentro del archivo MAKE (o Makefile), también puede agregar un objetivo para limpiar los archivos de objetos, como se muestra a continuación.

clean : 
	rm getname.o getaccno.o main.o

Ahora puede limpiar los archivos de objetos del directorio actual como se muestra a continuación.

$ make clean

Nota: En lugar de especificar el archivo *.o individual en el comando rm, también puede dar a rm *.o.

También puede crear archivos de almacenamiento C (*.a) usando el comando ar.

4. Manejo de variables en Makefile

Dentro del archivo MAKE (o Makefile) puede usar variables, que se pueden usar en todo el archivo MAKE. A continuación se muestra un ejemplo de uso, donde $obj contiene todos los nombres de archivos de objetos.

$ vim makefile
obj= getname.o getaccno.o main.o
getinfo: $(obj) header.h
	cc -o getinfo getname.o getaccno.o main.o header.h
main.o:main.c
	cc -c main.c
getaccno.o:getaccno.c
	cc -c getaccno.c
getname.o:getname.c
	cc -c getname.c

clean:
	rm getinfo $(obj)

5. Simplificando aún más el Makefile

La utilidad Make invoca implícitamente el comando cc -c para generar archivos .o para el archivo .c correspondiente. Realmente no necesitamos especificar el "cc -c" dentro del archivo MAKE. Entonces, podemos reescribir el archivo MAKE para reflejar esta regla implícita como se muestra a continuación.

$ vim makefile
obj= getname.o getaccno.o main.o
getinfo: $(obj) header.h
	cc -o getinfo getname.o getaccno.o main.o header.h
main.o:
getaccno.o:
getname.o:
clean:
	rm getinfo $(obj)

6. Insertar mensajes de depuración dentro de Makefile

Cuando está compilando un gran proyecto, es posible que desee mostrar algún mensaje amigable. La utilidad Make puede imprimir mensajes en la salida estándar, lo que podría ayudarlo a depurar cualquier problema potencial en el proceso de creación. Use la instrucción @echo en todo su archivo MAKE como se muestra a continuación para mostrar mensajes personalizados.

$ vim makefile
obj= getname.o getaccno.o main.o
getinfo: $(obj) header.h
	cc -o getinfo getname.o getaccno.o main.o header.h	
	@echo "make complete."
main.o:
getaccno.o:
getname.o:
clean:
	rm getinfo $(obj)
	@echo "getinfo, $(obj) files are removed."	

Ahí tienes. Hacer ya no es un misterio. Si le gustó este artículo, márquelo como favorito en delicious o búsquelo.


Linux
  1. Cómo depurar programas C en Linux usando gdb

  2. Usando el comando de suspensión de Linux en Bash Scripts

  3. Cómo reiniciar Linux usando la línea de comandos

  4. Mover una carpeta en Linux usando el comando mv

  5. ¿Cómo puedo encontrar mi versión de shell usando un comando de Linux?

Tutorial sobre el uso del comando Timeout en Linux

¿Necesita Java? Entonces puedes instalarlo Java en Linux

Programar trabajos en Linux con el comando 'at'

Usando el comando Watch en Linux

¿Puedes superar esto? 15 ejemplos prácticos de comandos superiores de Linux

Usando cut en Linux Terminal