el linux hacer El comando se utiliza para crear y mantener grupos de programas y archivos a partir del código fuente. En Linux, es uno de los comandos más utilizados por los desarrolladores. Ayuda a los desarrolladores a instalar y compilar muchas utilidades desde la terminal. Además, se encarga del proceso de compilación de proyectos importantes. Ahorra el tiempo de compilación.
El motivo principal del comando make es dividir un programa grande en partes y comprobar si es necesario recompilarlo o no. Además, emite las órdenes necesarias para recompilarlos.
En esta sección usaremos programas C++ ya que el lenguaje de programación C++ es un lenguaje orientado a objetos, pero puedes usar cualquier lenguaje instalado en tu máquina. No se limita sólo a los programas; También podemos usarlo para describir otras tareas.
¿Cómo funciona el comando make?
El comando make toma objetivos como argumentos. Estos argumentos se especifican en 'Makefile'. El archivo MAKE contiene los objetivos, así como las acciones asociadas relacionadas con estos objetivos.
Cuando ejecutamos el comando make, busca el archivo MAKE y lo escanea para encontrar el objetivo y acceder a sus dependencias. Si no se especifican las dependencias, buscará la dependencia y la construirá. Construirá el objetivo principal después de que se creen las dependencias.
Por ejemplo, si queremos cambiar solo un archivo fuente y ejecutamos el comando make; entonces, esto compilará solo el archivo objeto que está conectado con ese archivo fuente. Ahorrará mucho tiempo en la compilación final del proyecto.
¿Qué es Makefile?
El comando make invoca la ejecución del archivo make. Es un archivo especial que contiene los comandos de shell que creamos para mantener el proyecto. El archivo MAKE contiene objetivos y comandos para su ejecución. No está permitido crear más de un archivo MAKE. Se recomienda crear un directorio separado para ello.
Realiza un seguimiento de los archivos recientes, por lo que sólo actualiza aquellos archivos que sean necesarios. Si tenemos un programa grande con muchos archivos fuente, debemos recompilar todos los archivos dependientes. Por lo tanto, puede ser un proceso que lleve mucho tiempo.
El archivo MAKE tiene una lista de estándares. Estos estándares son útiles para que el sistema comprenda qué comando queremos ejecutar. Estos estándares están divididos en dos partes y separadas por una nueva línea. La primera línea es la línea de dependencia, y las líneas siguientes se consideran como acciones o comando s. Los comandos están separados por una tabulación en la nueva línea.
El dependencias especifique la relación de cada archivo con los archivos fuente. Y el objetivo es un archivo ejecutable y se crea después de la ejecución del comando make.
Opciones
El comando make facilita varias opciones para hacerlo más específico. Algunas opciones importantes son las siguientes:
hacer -p -f/dev/null.
Entendamos algunos ejemplos del comando make. Veremos el uso básico de Makefile y, además, crearemos algunos programas en C++ y un Makefile. Realizaremos algunas operaciones sobre ellos para comprender mejor el comando make.
jtextfield
Uso básico del comando make
Comprendamos el uso básico del comando make y puede que le ayude a comprender cómo funciona.
Cree un directorio 'proyecto' y cámbielo de directorio. Considere los siguientes comandos:
mkdir project cd project
Ahora crea un 'Archivo MAKE' teniendo el siguiente contenido para el primer programa:
say_hello: echo 'Hello World!'
Del archivo anterior, say_hello es un objetivo que se comporta como una función en cualquier lenguaje de programación y echo se considerará una acción. Hay que recordar que la acción debe escribirse utilizando un PESTAÑA. El objetivo y la acción juntos crean una regla para el archivo MAKE. Ahora, ejecute el comando make de la siguiente manera:
Considere el siguiente resultado:
En el resultado anterior, podemos ver que se muestra la operación de eco. Si no queremos mostrar el comando echo en la salida, ejecute el echo comenzando con '@' símbolo. Para suprimir el eco, actualice el contenido del archivo MAKE de la siguiente manera:
say_hello: @echo 'Hello World!'
Considere el siguiente resultado:
Un objetivo podría ser un archivo binario que depende de las acciones.
Agreguemos algunos objetivos más, como generar y enumerar en el archivo MAKE. Actualice el archivo MAKE de la siguiente manera:
say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
Si ejecutamos el comando make, solo ejecuta el primer objetivo porque es el objetivo predeterminado del archivo make. Considere el siguiente resultado:
Podemos cambiar el objetivo predeterminado incluyendo el siguiente contenido en nuestro archivo MAKE:
.DEFAULT_GOAL := generate
Agréguelo a la primera línea del archivo de la siguiente manera:
jtextfield
El archivo MAKE anterior considerará 'generar' como el objetivo predeterminado. Ejecute el comando make y el resultado será el siguiente:
La opción OBJETIVO PREDETERMINADO ejecutará solo un objetivo para especificar más de un objetivo para usar todas las opciones. Para especificar más de un objetivo, actualice la primera línea del archivo MAKE de la siguiente manera:
all: say_hello generate
Ejecutará el objetivo especificado. Considere el siguiente resultado:
Existe otra opción que nos permite ejecutar todos los objetivos. Si queremos ejecutar todos los objetivos del archivo MAKE, actualice el archivo de la siguiente manera:
.PHONY: all say_hello generate list say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
El archivo anterior realizará todos los objetivos especificados. Ejecute el comando make, considere el siguiente resultado:
Uso avanzado del comando make
Creemos un proyecto C++ que tenga los archivos main.cpp, function1.cpp, function2.cpp y un archivo de dependencia function.h.
El código de los archivos es el siguiente:
tira de pitón
principal.cpp:
#include #include 'functions.h' int main() { print_hello(); std::cout<< std::endl; std::cout<< 'The factorial of 5 is' << factorial(5) << std:: endl; return 0; }
función1.cpp:
#include 'functions.h' int factorial(int n) { if(n!=1) { return (n * factorial(n-1)); } else return 1; }
función2.cpp:
#include #include 'functions.h' void print_hello() { std::cout << 'Hello World'; }
funciones.h:
void print_hello(); int factorial (int n);
Ahora cree un archivo ejecutable del proyecto anterior ejecutando el siguiente comando:
g++ main.cpp function1.cpp function2.cpp -o hello
El comando anterior creará un archivo ejecutable. 'Hola' de los archivos main.cpp, function1.cpp y function2.cpp.
Considere el siguiente resultado:
Del resultado anterior, si se ejecuta con éxito, no dará ningún resultado.
Realicemos la misma tarea usando el archivo MAKE.
Crea un archivo como Archivo Make y ponga el siguiente código en él.
all: g++ main.cpp function1.cpp function2.cpp -o hello
La palabra clave all se usa para el objetivo y en nueva línea coloque el mismo comando con un TAB que el anterior para especificar la operación. Guarda el archivo. Considere el siguiente archivo:
Para operar, ejecute el comando de la siguiente manera:
comienza con java
make
El comando anterior creará un archivo ejecutable 'hola' de los archivos especificados. Considere el siguiente resultado:
Agreguemos algunas tareas más a Makefile. Agregar una tarea 'compilar' como sigue:
all: compile: g++ main.cpp function1.cpp function2.cpp -o hello
Para ejecutar la tarea compilar, ejecute el siguiente comando:
make compile
El comando anterior ejecutará la tarea de compilación. Considere el siguiente resultado:
Realicemos algunas tareas más en nuestro archivo MAKE.
actualice el Makefile de la siguiente manera:
all: hello hello: main.o function1.o function2.o g++ main.o function1.o function2.o -o hello main.o: main.cpp g++ -c main.cpp function1.o: function1.cpp g++ -c function1.cpp function2.o: function2.cpp g++ -c function2.cpp clean: rm -rf *o hello
A partir del archivo MAKE anterior, hemos creado tres objetos: main.o, function1.o y function2.o. Además, hemos proporcionado las dependencias para los objetivos main.o, function1.o y function2.o como main.cpp, function1.cpp y function2.cpp respectivamente. Todos los objetivos realizarán las tareas especificadas dentro de él. También hemos especificado un objetivo limpio para limpiar todas las dependencias y eliminar el archivo ejecutable.
Ahora ejecute el comando make all para ejecutar nuestro nuevo archivo MAKE.
make all
Considere el siguiente resultado:
En el resultado anterior, podemos ver que el comando ejecutó primero main.o, function1.o y function2.o respectivamente. Creará el archivo ejecutable y de objetos de los archivos proporcionados. No ejecutará el objetivo limpio porque no lo hemos especificado en hola. Considere los siguientes archivos:
El comando make tiene un proceso de trabajo sencillo. Ejecutó la opción todo y fue a saludar. Después de ejecutar hola, lee el objetivo en la secuencia especificada. Buscó cada objetivo y su dependencia y los ejecutó en secuencia.
Para eliminar los objetos y el archivo ejecutable, realice la tarea de limpieza. Para realizar la tarea de limpieza, ejecute el comando de la siguiente manera:
make clean
Considere el siguiente resultado:
El comando anterior eliminará todos los objetos y archivos ejecutables. Vea la siguiente instantánea del directorio:
En la imagen de arriba, podemos ver que hemos limpiado nuestro directorio.
Variables en el comando make
Podemos definir las variables en nuestro makefile. Para definir las variables, utilice el '=' operador. Por ejemplo, si queremos crear una variable A y asignarle un comando gcc, asígnala como:
lenguaje java central
A=g++
Úselo de la siguiente manera en nuestro archivo MAKE:
hello: hello.cpp ${A} hello.cpp -o hello
Se pasa a la terminal como:
g++ hello.cpp -o hello
Podemos usar $(A) en lugar de ${A}, ya que el script trata a ambos de la misma manera.
Comentarios en makefile
Para agregar un comentario al archivo MAKE, use el '#' símbolo. Por ejemplo, para agregar un comentario en la sección de compilación, agréguelo como '# Esto compilará el programa .' El compilador ignora los comentarios.