Il Linux Fare Il comando viene utilizzato per creare e mantenere gruppi di programmi e file dal codice sorgente. In Linux è uno dei comandi più utilizzati dagli sviluppatori. Aiuta gli sviluppatori a installare e compilare molte utilità dal terminale. Inoltre, gestisce il processo di compilazione di progetti di grandi dimensioni. Risparmia il tempo di compilazione.
Lo scopo principale del comando make è suddividere in parti un programma di grandi dimensioni e verificare se necessita di essere ricompilato o meno. Inoltre, emette gli ordini necessari per ricompilarli.
In questa sezione utilizzeremo i programmi C++ poiché il linguaggio di programmazione C++ è un linguaggio orientato agli oggetti, ma puoi utilizzare qualsiasi linguaggio installato sul tuo computer. Non si limita solo ai programmi; possiamo usarlo anche per descrivere altri compiti.
Come funziona il comando make?
Il comando make accetta obiettivi come argomenti. Questi argomenti sono specificati in 'Makefile.' Il makefile contiene i target e le azioni associate relative a questi target.
Quando eseguiamo il comando make, cerca il makefile e lo scansiona per trovare la destinazione e accedere alle sue dipendenze. Se le dipendenze non vengono specificate, cercherà la dipendenza e la creerà. Costruirà l'obiettivo principale dopo la creazione delle dipendenze.
Ad esempio, se vogliamo modificare un solo file sorgente ed eseguiamo il comando make; quindi, questo compilerà solo il file oggetto connesso a quel file sorgente. Risparmierà molto tempo nella compilazione finale del progetto.
Cos'è Makefile?
Il comando make richiama l'esecuzione del makefile. È un file speciale che contiene i comandi shell che creiamo per mantenere il progetto. Il makefile contiene destinazioni e comandi per l'esecuzione. Non è consentito creare più di un makefile. Si consiglia di creare una directory separata per questo.
Tiene traccia dei file recenti, quindi aggiorna solo i file richiesti. Se abbiamo un programma di grandi dimensioni con molti file sorgente, dobbiamo ricompilare tutti i file dipendenti. Quindi, potrebbe essere un processo che richiede molto tempo.
Il makefile ha un elenco di standard. Questi standard sono utili al sistema per capire quale comando vogliamo eseguire. Questi standard sono divisi in due parti e separati da una nuova riga. La prima riga è la linea di dipendenza, e le righe successive sono considerate come azioni o comandi S. I comandi sono separati da un tab nella nuova riga.
IL dipendenze specificare la relazione di ciascun file con i file di origine. E il bersaglio è un file eseguibile e viene creato dopo l'esecuzione del comando make.
Opzioni
Il comando make facilita varie opzioni per renderlo più specifico. Alcune opzioni importanti sono le seguenti:
make -p -f/dev/null.
Comprendiamo alcuni esempi del comando make. Vedremo l'uso di base del makefile e, inoltre, creeremo alcuni programmi C++ e un makefile. Effettueremo su di essi alcune operazioni per comprendere meglio il comando make.
registro insensato
Uso di base del comando make
Comprendiamo l'uso di base del comando make e potrebbe aiutarti a capire come funziona.
Crea una directory 'progetto' e cambia la directory in essa. Considera i comandi seguenti:
mkdir project cd project
Ora crea un 'Makefile' avente il seguente contenuto per il primo programma:
say_hello: echo 'Hello World!'
Dal file precedente, say_hello è un target che si comporta come una funzione in qualsiasi linguaggio di programmazione ed echo verrà considerata come un'azione. È necessario ricordare che l'azione deve essere scritta utilizzando a TAB. La destinazione e l'azione insieme creano una regola per il makefile. Ora esegui il comando make come segue:
Considera l'output seguente:
Dall'output precedente, possiamo vedere l'operazione di eco stessa visualizzata. Se non vogliamo visualizzare il comando echo sull'output, eseguiamo echo iniziando da '@' simbolo. Per sopprimere l'eco, aggiornare il contenuto del makefile come segue:
say_hello: @echo 'Hello World!'
Considera l'output seguente:
Una destinazione potrebbe essere un file binario che dipende dalle azioni.
Aggiungiamo qualche altro target, come generate e list nel makefile. Aggiorna il makefile come segue:
composizione delle relazioni
say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
Se eseguiamo il comando make, verrà eseguito solo il primo target perché è il target predefinito del makefile. Considera l'output seguente:
Possiamo modificare la destinazione predefinita includendo il contenuto seguente nel nostro makefile:
.DEFAULT_GOAL := generate
Aggiungilo alla prima riga del file come segue:
Il makefile sopra considererà 'generare' come obiettivo predefinito. Esegui il comando make e fornirà l'output come segue:
L'opzione DEFAULT GOAL eseguirà solo un target per specificare più di un target per utilizzare tutte le opzioni. Per specificare più di una destinazione, aggiornare la prima riga del makefile come segue:
all: say_hello generate
Eseguirà il target specificato. Considera l'output seguente:
C'è un'altra opzione che ci consente di eseguire tutti gli obiettivi. Se vogliamo eseguire tutte le destinazioni del makefile, aggiorniamo il file come segue:
.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
Il file sopra eseguirà tutti gli obiettivi specificati. Esegui il comando make, considera l'output seguente:
Uso avanzato del comando make
Creiamo un progetto C++ con i file main.cpp, function1.cpp, function2.cpp e un file di dipendenza function.h.
Il codice dei file è il seguente:
l'età di sara ali khan
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; }
funzione1.cpp:
#include 'functions.h' int factorial(int n) { if(n!=1) { return (n * factorial(n-1)); } else return 1; }
funzione2.cpp:
#include #include 'functions.h' void print_hello() { std::cout << 'Hello World'; }
funzioni.h:
void print_hello(); int factorial (int n);
Ora crea un file eseguibile del progetto sopra eseguendo il comando seguente:
g++ main.cpp function1.cpp function2.cpp -o hello
Il comando precedente creerà un file eseguibile 'Ciao' dei file main.cpp, function1.cpp e function2.cpp.
Considera l'output seguente:
Dall'output precedente, se eseguito con successo, non verrà restituito alcun output.
Eseguiamo la stessa attività utilizzando il makefile.
Crea un file come Makefile e inserisci il codice seguente.
all: g++ main.cpp function1.cpp function2.cpp -o hello
La parola chiave all viene utilizzata per target e in newline inserire lo stesso comando con un TAB come sopra per specificare l'operazione. Salvare il file. Considera il file seguente:
Per operare, eseguire il comando come segue:
commento PowerShell su più righe
make
Il comando precedente creerà un file eseguibile 'ciao' dei file specificati. Considera l'output seguente:
Aggiungiamo alcune altre attività a Makefile. Aggiungi un'attività 'compilare' come segue:
all: compile: g++ main.cpp function1.cpp function2.cpp -o hello
Per eseguire l'attività compilare, eseguire il comando seguente:
make compile
Il comando precedente eseguirà l'attività di compilazione. Considera l'output seguente:
Eseguiamo alcune altre attività sul nostro makefile.
aggiorna il Makefile come segue:
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
Dal makefile precedente, abbiamo creato tre oggetti come main.o, function1.o e function2.o. Inoltre, abbiamo fornito le dipendenze per gli obiettivi main.o, function1.o e function2.o rispettivamente come main.cpp, function1.cpp e function2.cpp. Tutti i target eseguiranno le attività specificate al suo interno. Abbiamo anche specificato un obiettivo pulito per pulire tutte le dipendenze e rimuovere il file eseguibile.
Ora esegui il comando make all per eseguire il nostro nuovo makefile.
make all
Considera l'output seguente:
Dall'output sopra, possiamo vedere che il comando ha prima eseguito rispettivamente main.o, function1.o e function2.o. Creerà il file eseguibile e gli oggetti dei file specificati. Non eseguirà il target pulito perché non lo abbiamo specificato in hello. Considera i file seguenti:
Il comando make ha un processo di lavoro semplice. Ha eseguito l'opzione all ed è andato a ciao. Dopo l'esecuzione di hello, legge il target nella sequenza specificata. Ha cercato ogni destinazione e la sua dipendenza e li ha eseguiti in sequenza.
Per rimuovere gli oggetti e il file eseguibile, eseguire l'attività di pulizia. Per eseguire l'attività di pulizia, eseguire il comando come segue:
make clean
Considera l'output seguente:
Il comando precedente rimuoverà tutti gli oggetti e i file eseguibili. Vedi lo snap qui sotto della directory:
Dall'immagine sopra, possiamo vedere che abbiamo ripulito la nostra directory.
Variabili nel comando make
Possiamo definire le variabili nel nostro makefile. Per definire le variabili, utilizzare il file '=' operatore. Ad esempio, se vogliamo creare una variabile A e assegnarle un comando gcc, assegnatelo come:
differenza tra amore e simpatia
A=g++
Usalo come segue nel nostro makefile:
hello: hello.cpp ${A} hello.cpp -o hello
Viene passato al terminale come:
g++ hello.cpp -o hello
Possiamo usare $(A) invece di ${A}, poiché entrambi vengono trattati allo stesso modo dallo script.
Commenti nel makefile
Per aggiungere un commento nel makefile, utilizzare il file '#' simbolo. Ad esempio, per aggiungere un commento nella sezione di compilazione, aggiungilo come '# Questo compilerà il programma .' I commenti vengono ignorati dal compilatore.