El Linux fer L'ordre s'utilitza per crear i mantenir grups de programes i fitxers a partir del codi font. A Linux, és una de les ordres més utilitzades pels desenvolupadors. Ajuda als desenvolupadors a instal·lar i compilar moltes utilitats des del terminal. A més, gestiona el procés de compilació dels grans projectes. Estalvia el temps de compilació.
El motiu principal de l'ordre make és determinar un programa gran en parts i comprovar si cal recompilar-lo o no. A més, emet les ordres necessàries per recompilar-les.
En aquesta secció, utilitzarem programes C++ ja que el llenguatge de programació C++ és un llenguatge orientat a objectes, però podeu utilitzar qualsevol llenguatge instal·lat a la vostra màquina. No es limita només als programes; el podem utilitzar per descriure altres tasques també.
Com funciona l'ordre Make?
L'ordre make pren els objectius com a arguments. Aquests arguments s'especifiquen a 'Makefile'. El makefile conté els objectius i les accions associades relacionades amb aquests objectius.
Quan executem l'ordre make, cerca el makefile i l'escaneja per trobar l'objectiu i accedir a les seves dependències. Si no s'especifiquen dependències, buscarà la dependència i la construirà. Construirà l'objectiu principal després de crear les dependències.
Per exemple, si volem canviar només un fitxer font i executem l'ordre make; per tant, això compilarà només el fitxer objecte connectat amb aquest fitxer font. S'estalviarà molt de temps en la compilació final del projecte.
Què és Makefile?
L'ordre make invoca l'execució del fitxer make. És un fitxer especial que conté les ordres de shell que creem per mantenir el projecte. El makefile conté objectius i ordres per a l'execució. No està permès crear més d'un fitxer makefile. Es recomana crear un directori separat per a això.
Fa un seguiment dels fitxers recents, de manera que només actualitza els fitxers necessaris. Si tenim un programa gran amb molts fitxers font, hem de recompilar tots els fitxers dependents. Per tant, pot ser un procés molt llarg.
El makefile té una llista d'estàndards. Aquests estàndards són útils perquè el sistema entengui quina ordre volem executar. Aquests estàndards estan en dues parts i separats per una nova línia. La primera línia és la línia de dependència, i les línies posteriors es consideren com a accions o comandament s. Les ordres es separen amb una pestanya a la nova línia.
El dependències especificar la relació de cada fitxer amb els fitxers font. I la objectiu és un fitxer executable i es crea després de l'execució de l'ordre make.
Opcions
L'ordre make facilita diverses opcions per fer-ho més específic. Algunes opcions importants són les següents:
fer -p -f/dev/null.
Entendrem alguns exemples de l'ordre make. Veurem l'ús bàsic de makefile i, a més, crearem alguns programes en C++ i un makefile. Farem algunes operacions sobre ells per entendre millor l'ordre make.
mida de python
Ús bàsic de l'ordre make
Entenem l'ús molt bàsic de l'ordre make, i us pot ajudar a entendre com funciona.
javafx
Creeu un directori 'projecte' i canvieu-hi el directori. Tingueu en compte les ordres següents:
mkdir project cd project
Ara crea un 'Makefile' amb el contingut següent per al primer programa:
say_hello: echo 'Hello World!'
A partir del fitxer anterior, say_hello és un objectiu que es comporta com una funció en qualsevol llenguatge de programació, i l'eco es considerarà com una acció. Cal recordar que l'acció s'ha d'escriure utilitzant a TAB. L'objectiu i l'acció junts creen una regla per al fitxer makefile. Ara, executeu l'ordre make de la següent manera:
Considereu la sortida següent:
A partir de la sortida anterior, podem veure que es mostra l'operació d'eco en si. Si no volem mostrar l'ordre echo a la sortida, executeu l'eco començant per '@' símbol. Per suprimir l'eco, actualitzeu el contingut de makefile de la següent manera:
say_hello: @echo 'Hello World!'
Considereu la sortida següent:
Un objectiu pot ser un fitxer binari que depèn de les accions.
Afegim uns quants objectius més, com ara generar i llistar al fitxer makefile. Actualitzeu el fitxer makefile de la següent manera:
say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
Si executem l'ordre make, només executa el primer objectiu perquè és l'objectiu predeterminat del makefile. Considereu la sortida següent:
Podem canviar l'objectiu predeterminat incloent el contingut següent al nostre makefile:
.DEFAULT_GOAL := generate
Afegiu-lo a la primera línia del fitxer de la següent manera:
El makefile anterior considerarà 'generar' com a objectiu predeterminat. Executeu l'ordre make i donarà la sortida de la següent manera:
L'opció OBJECTIU PREDETERMINAT només executarà un objectiu per especificar més d'un objectiu per utilitzar totes les opcions. Per especificar més d'un objectiu, actualitzeu la primera línia del fitxer makefile de la manera següent:
all: say_hello generate
Executarà l'objectiu especificat. Considereu la sortida següent:
Hi ha una altra opció que ens permet executar tots els objectius. Si volem executar tots els objectius del makefile, actualitzeu el fitxer de la següent 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 fitxer anterior realitzarà tots els objectius especificats. Executeu l'ordre make, tingueu en compte la sortida següent:
Ús avançat de l'ordre make
Creem un projecte C++ amb fitxers main.cpp, function1.cpp, function2.cpp i un fitxer de dependència function.h.
El codi dels fitxers és el següent:
L'actriu Rakul Preet Singh
main.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; }
function1.cpp:
#include 'functions.h' int factorial(int n) { if(n!=1) { return (n * factorial(n-1)); } else return 1; }
function2.cpp:
#include #include 'functions.h' void print_hello() { std::cout << 'Hello World'; }
funcions.h:
void print_hello(); int factorial (int n);
Ara creeu un fitxer executable del projecte anterior executant l'ordre següent:
g++ main.cpp function1.cpp function2.cpp -o hello
L'ordre anterior crearà un fitxer executable 'Hola' dels fitxers main.cpp, function1.cpp i function2.cpp.
Considereu la sortida següent:
A partir de la sortida anterior, si s'executa amb èxit, no donarà cap sortida.
Realitzem la mateixa tasca utilitzant el makefile.
Creeu un fitxer com Makefile i poseu-hi el codi següent.
all: g++ main.cpp function1.cpp function2.cpp -o hello
La paraula clau all s'utilitza per a l'objectiu i, a la nova línia, poseu la mateixa ordre amb una TAB que l'anterior per especificar l'operació. Desa el fitxer. Considereu el fitxer següent:
Per operar, executeu l'ordre de la següent manera:
clau única mysql
make
L'ordre anterior crearà un fitxer executable 'hola' dels fitxers especificats. Considereu la sortida següent:
Afegim algunes tasques més a Makefile. Afegeix una tasca 'compilar' com segueix:
all: compile: g++ main.cpp function1.cpp function2.cpp -o hello
Per executar la tasca compilar, executeu l'ordre següent:
make compile
L'ordre anterior executarà la tasca de compilació. Considereu la sortida següent:
Anem a realitzar algunes tasques més al nostre makefile.
actualitzeu el Makefile de la següent 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 makefile anterior, hem creat tres objectes com a main.o, function1.o i function2.o. A més, hem proporcionat les dependències per als objectius main.o, function1.o i function2.o com a main.cpp, function1.cpp i function2.cpp respectivament. Tots els objectius realitzaran les tasques especificades dins d'ell. També hem especificat un objectiu net per netejar totes les dependències i eliminar el fitxer executable.
Ara executeu l'ordre make all per executar el nostre nou makefile.
make all
Considereu la sortida següent:
A partir de la sortida anterior, podem veure que l'ordre va executar primer main.o, function1.o i function2.o respectivament. Crearà el fitxer executable i d'objectes dels fitxers donats. No executarà l'objectiu net perquè no l'hem especificat a hello. Considereu els fitxers següents:
L'ordre make té un procés de treball senzill. Va executar l'opció All i va anar a hola. Després de l'execució de Hello, va llegir l'objectiu en la seqüència especificada. Va cercar tots els objectius i la seva dependència i els va executar en la seqüència.
Per eliminar els objectes i el fitxer executable, realitzeu la tasca de neteja. Per realitzar la tasca de neteja, executeu l'ordre de la següent manera:
make clean
Considereu la sortida següent:
L'ordre anterior eliminarà tots els objectes i fitxers executables. Vegeu el següent snap del directori:
A la imatge de dalt, podem veure que hem netejat el nostre directori.
Variables a l'ordre make
Podem definir les variables al nostre makefile. Per definir les variables, utilitzeu '=' operador. Per exemple, si volem crear una variable A i assignar-li una ordre gcc, assigneu-la com:
símbol de derivada parcial làtex
A=g++
Utilitzeu-lo de la següent manera al nostre makefile:
hello: hello.cpp ${A} hello.cpp -o hello
Es passa al terminal com:
g++ hello.cpp -o hello
Podem utilitzar $(A) en comptes de ${A}, ja que ambdós són tractats de la mateixa manera per l'script.
Comentaris al makefile
Per afegir un comentari al fitxer makefile, utilitzeu '#' símbol. Per exemple, per afegir un comentari a la secció de compilació, afegiu-lo com a '# Això compilarà el programa .' Els comentaris són ignorats pel compilador.