Cuando construimos proyectos en C/C++, tenemos dependencias entre archivos. Por ejemplo, puede haber un archivo ac que llame a una función de bc. Entonces, debemos compilar bc antes que ac. Puede haber muchas dependencias en un proyecto y seguir manualmente estas dependencias y compilar archivos uno por uno se vuelve difícil. En este artículo, vamos a ver cómo la utilidad make puede ayudarnos a hacer esto simple. Primero necesitamos crear 4 archivos en los cuales 2 de ellos son archivos .c y 1 archivo de encabezado (.h) y 1 archivo de creación (.mk).
Llamemos a los archivos como client.c y server.c y server.h y makefile.mk
Makefile es un conjunto de comandos (similares a los comandos de terminal) con nombres de variables y objetivos para crear archivos de objetos y eliminarlos. En un solo archivo de creación, podemos crear múltiples objetivos para compilar y eliminar objetos, archivos binarios. Puede compilar su proyecto (programa) cualquier número de veces usando Makefile. La idea principal de este archivo es especificar las dependencias.
Utilidad make: esta es una utilidad de línea de comandos y se usa para procesar las instrucciones escritas en el Makefile.
Tomemos un ejemplo sencillo. El archivo client.c contiene la función principal, el archivo server.c contiene la función definida por el usuario,
el tercer archivo que es el archivo de encabezado server.h que llama a las funciones definidas por el usuario en el archivo server.c y el cuarto archivo que es makefile .mk que contiene un conjunto de todos los comandos con sus nombres de variables.
Aquí escribimos el archivo client.c
C
// This is client.c file #include "stdio.h" // This is header file that we have created // in the beginning. #include "server.h" int main() { printf("hey there, welcome to "); greetings(); return 0; }
Este es el archivo client.c que contiene dos archivos de encabezado, uno es #include”stdio.h” y el otro es el archivo #include”server.h” y recuerde que este es el mismo archivo que hemos creado al principio y contiene función principal que contiene la instrucción printf que se imprime como «hola, bienvenido a» (sin comillas) y las funciones principales también llaman a la otra función definida por el usuario que es saludos().
Ahora escribimos el archivo server.c
C
// This is server.c file #include "server.h" #include "stdio.h" void greetings() { printf("geeksforgeeks !"); }
En este server.c que incluye los dos archivos de encabezado, uno es #include”stdio.h” y el otro es el archivo #include”server.h” y recuerde que este es el mismo archivo que hemos creado al principio y contiene user función de saludos definida que contiene la instrucción printf que se imprime como «geeksforgeeks!» (sin comillas).
Ahora escribimos el archivo server.h
C
// This is server.h file void greetings();
Este archivo server.h es muy simple, llama a las funciones que están escritas en ese archivo y cuando incluimos este archivo de encabezado en los otros programas c, podemos usar las funciones definidas en este archivo de encabezado. Aquí este archivo server.h incluye las funciones dondequiera que esté incluido.
Ahora escribimos el archivo makefile.mk
C
// This is makefile.c file a : client.o server.o gcc client.o server.o client.o : client.o server.h gcc - c client.c server.o : server.o server.h gcc - c server.c
Ahora lea esto detenidamente aquí le mostraré cómo escribir un archivo MAKE,
Esto está en Windows, por lo que el archivo de objeto es «a» si está utilizando Linux, reemplace «a» por «a.out» (sin comillas)
Vea la primera línea del código en la que «a» representa el archivo de objeto que contiene todo el código que escribimos hasta ahora, después de «a» hay dos archivos de objeto más que son cliente.o y servidor.o estos son los archivos de objeto que se requieren para hacer el archivo de objeto «a», en el siguiente en la línea hay un comando gcc, recuerde esto, debe haber 1 espacio de tabulación antes de escribir el comando gcc (si olvidó poner la pestaña, este programa no se ejecutará), el comando gcc compila los archivos que se le dan y los almacena en el nombre de su objeto archivos
Esto se entiende fácilmente como aquí,
target target_name:
comando de requisitos previos con espacio de tabulación
Otra forma de recordar es
la comida: alimentos que
hacen comida
Ahora pasemos a la tercera línea aquí, se necesita client.o (porque se usa en la primera línea de código), por lo que los requisitos previos para ese archivo son client.o y server.h. El comando gcc compilará el cliente. c para obtener el archivo client.o.
Lo último que necesitamos es el archivo server.o para obtener ese archivo, necesitamos el archivo de objeto server.o y el archivo de encabezado server.h,
el compilador gcc compilará el archivo server.c para obtener el archivo server.o
ahora todo lo que necesitamos está listo, el código del archivo MAKE está completo ahora.
Ahora verá cómo ejecutar el archivo make.
// Esto se usa para ejecutar el archivo MAKE
make -f makefile.mk
Esta es la sintaxis para ejecutar el archivo MAKE después de escribir esto, presione enter, el código se compilará y creará un archivo ejecutable llamado «a» (en Windows), «a.out» (en Linux).
Ahora para ejecutar el archivo está aquí
// Recuerde que esto debe hacerse solo después de ejecutar el comando makefile
// Esto en Windows
a
//Esto en Linux
./a.out
Ejemplos:
Output : hey there, welcome to geeksforgeeks
¿Cómo hace que la utilidad funcione internamente? Crea un gráfico de dependencia de tareas y utiliza el algoritmo de clasificación topológica para encontrar una secuencia válida que siga todas las dependencias dadas.
Publicación traducida automáticamente
Artículo escrito por gurukiranx y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA