logo

comando de creación de Linux

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:

    -b, -m:Estas opciones se utilizan para ignorar la compatibilidad de las diferentes versiones del comando make.-B, --siempre-hacer:Estas opciones se utilizan para lograr todos los objetivos incondicionalmente.-C directorio, --directorio=directorio:Estas opciones se utilizan para cambiar el directorio antes de ejecutar el archivo MAKE.-d:Se utiliza para imprimir la información de depuración.--depurar[=BANDERAS]:Se utiliza para imprimir la información de depuración junto con el procesamiento normal. Si omitimos la bandera, mostrará resultados similares a los de la opción '-d'.-e, --anulaciones-de-entorno:Se utiliza para proporcionar las variables tomadas de la precedencia del entorno al archivo MAKE.-f archivo, --file=archivo, --makefile=ARCHIVO:Se utiliza para utilizar un archivo como archivo MAKE.-i, --ignorar-errores:La opción '-i' se utiliza para ignorar todos los errores en los comandos.-Yo dir, --include-dir=dir:Se utiliza para especificar un directorio para buscar el archivo MAKE especificado. Si especificamos las muchas opciones '-I', buscará en todos los directorios en el orden especificado.-j [trabajos], --trabajos[=trabajos]:Se utiliza para especificar la cantidad de trabajos que se ejecutarán simultáneamente. Si proporcionamos muchas opciones '-j', se considerará que se ejecuta la última. Si no especificamos la cantidad de trabajos, no limitará los trabajos que se pueden ejecutar simultáneamente.-k, --sigue adelante:Se utiliza para continuar el programa tanto como sea posible después de recibir un error.-l [cargar], --load-average[=cargar]:Se utiliza para especificar que no se debe iniciar ninguna tarea nueva si hay otras tareas en la cola y el promedio de carga es mínimo.-n, --just-print, --dry-run, --recon:Se utiliza para mostrar el comando que se ejecutaría.-o archivo, --old-file=archivo, --assume-old=archivo:Se utiliza para garantizar que make no rehaga el archivo incluso si es más antiguo que sus dependencias.-O[tipo], --output-sync[=tipo]:Se utiliza para confirmar que el resultado de cada tarea esté conjunto en lugar de un resultado mezclado de otras tareas. Es útil para el procesamiento de múltiples trabajos con la opción '-j'.-p, --print-data-base:Se utiliza para imprimir la base de datos que se produce después de leer los archivos MAKE. También es útil imprimir la información de la versión cuando se usa con la opción '-v'. Para imprimir la base de datos sin intentar rehacer ningún archivo, ejecute el comando de la siguiente manera:
    hacer -p -f/dev/null.-q, --pregunta:La opción '-q' se utiliza para Modo pregunta. No ejecutará ningún comando ni imprimirá nada. Solo devolverá un estado de salida cero si el objetivo especificado ya está sincronizado; de lo contrario, mostrará un estado de salida distinto de cero.-r, --no-reglas-integradas:Se utiliza para eliminar el uso de reglas implícitas integradas.-R, --sin-variables-incorporadas:Es útil si no queremos definir ninguna variable incorporada.-s, --silencio, --quieto:Estas opciones se llaman Funcionamiento silencioso. Se restringe a imprimir los comandos a medida que se ejecutan.-S, --no-continuar, --parar:Se utiliza para cancelar el efecto de la operación '-k, --keep-going'.-t, --tocar:Se utiliza para tocar archivos en lugar de ejecutar sus comandos.--rastro:Se utiliza para rastrear la disposición de cada objetivo.-v, --versión:Se utiliza para imprimir la versión instalada de la utilidad make. Además, muestra una lista de autores, derechos de autor y algún aviso sobre la utilidad de creación.-w, --directorio-print:Se utiliza para rastrear un mensaje impreso que contiene un directorio de trabajo antes y después de otro procesamiento. Es útil para localizar errores de la complicada estructura del comando make recursivo.--no-print-directorio:Se utiliza para desactivar la opción '-w'.-W archivo, --what-if=archivo, --new-file=archivo, --assume-new=archivo:Estas opciones pretenden que el archivo de destino acaba de ser modificado.--warn-variables-indefinidas:Esta opción se utiliza para advertir que se hace referencia a una variable no definida.

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:

comando de creación de Linux

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:

comando de creación de Linux

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:

comando de creación de Linux

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
comando de creación de Linux

El archivo MAKE anterior considerará 'generar' como el objetivo predeterminado. Ejecute el comando make y el resultado será el siguiente:

comando de creación de Linux

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:

comando de creación de Linux

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:

comando de creación de Linux

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:

comando de creación de Linux

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:

comando de creación de Linux

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:

comando de creación de Linux

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:

comando de creación de Linux

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:

comando de creación de Linux

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:

comando de creación de Linux

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:

comando de creación de Linux

El comando anterior eliminará todos los objetos y archivos ejecutables. Vea la siguiente instantánea del directorio:

comando de creación de Linux

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.