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
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
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.