GNU/Linux >> Linux Esercitazione >  >> Linux

Linux make comando spiegato con esempi

Il marca command in Linux è uno dei comandi più utilizzati dagli amministratori di sistema e dai programmatori. Mentre aiuta gli amministratori a compilare e installare molte utilità open source tramite la riga di comando, i programmatori lo usano per gestire la compilazione dei loro progetti grandi e complicati. In questo articolo, discuteremo del funzionamento interno del make comando insieme ad alcuni esempi pratici.

Come fare Opera di comando

Per coloro che non sono a conoscenza, il comando make accetta target come argomenti della riga di comando. Questi target sono solitamente specificati in un file chiamato 'Makefile', che contiene anche l'azione associata corrispondente ai target. Per ulteriori informazioni, leggi la nostra serie di articoli su come funzionano i Makefile.

Quando il comando make viene eseguito per la prima volta, esegue la scansione del Makefile per trovare la destinazione (fornitagli) e quindi legge le sue dipendenze. Se queste dipendenze sono destinazioni stesse, esegue la scansione del Makefile per queste destinazioni e crea le loro dipendenze (se presenti), quindi le crea. Una volta che le dipendenze principali sono state compilate, costruisce la destinazione principale (che è stata passata al comando make).

Ora, supponiamo di apportare modifiche a un solo file sorgente ed eseguire nuovamente il comando make, questo compilerà solo i file oggetto corrispondenti a quel file sorgente e quindi farà risparmiare un sacco di tempo nella compilazione dell'eseguibile finale.

crea esempi di comandi

Di seguito sono riportati i dettagli dell'ambiente di test utilizzato per questo articolo :

  • OS – Ubuntu 13.04
  • Shell – Bash 4.2.45
  • Applicazione – GNU Make 3.81

Di seguito i contenuti del progetto :

$ ls
anotherTest.c Makefile test.c test.h

ed ecco i contenuti del Makefile :

all: test

test: test.o anotherTest.o
        gcc -Wall test.o anotherTest.o -o test

test.o: test.c
        gcc -c -Wall test.c

anotherTest.o: anotherTest.c
        gcc -c -Wall anotherTest.c

clean:
        rm -rf *.o test

Ora, diamo un'occhiata ad alcuni degli esempi di utilizzo del comando make in Linux.

1) Un semplice esempio

Per compilare il progetto, puoi semplicemente usare 'make' o puoi usare il target 'all' con il comando make.

$ make
gcc -c -Wall test.c
gcc -c -Wall anotherTest.c
gcc -Wall test.o anotherTest.o -o test

Quindi puoi vedere che il comando make crea prima le dipendenze e poi la destinazione effettiva.

Se dai un'occhiata al contenuto della directory, ci sarebbero file .o e file eseguibili in essa:

$ ls
anotherTest.c anotherTest.o Makefile test test.c test.h test.o

Supponiamo ora di apportare alcune modifiche a test.ce di ricompilare il progetto con make :

$ make
gcc -c -Wall test.c
gcc -Wall test.o anotherTest.o -o test

Quindi puoi vedere che solo test.o viene ricompilato, mentre un altroTest.o non viene ricompilato.

Ora, per pulire tutti i file oggetto insieme all'eseguibile 'test', puoi usare il target 'clean' :

$ make clean
rm -rf *.o test

$ ls
anotherTest.c Makefile test.c test.h

Quindi puoi vedere che tutti i file .o e l'eseguibile 'test' sono stati eliminati.

2) Crea sempre tutti i target tramite l'opzione -B

A questo punto, probabilmente saresti consapevole del fatto che il comando make non compila quei file che non sono cambiati dall'ultima volta. Ma, se vuoi sovrascrivere il comportamento predefinito della marca, puoi usare l'opzione -B.

Ecco un esempio :

$ make
make: Nothing to be done for `all'.

$ make -B
gcc -c -Wall test.c
gcc -c -Wall anotherTest.c
gcc -Wall test.o anotherTest.o -o test

Quindi puoi vedere che mentre il comando "make" non ha compilato alcun file, "make -B" ha compilato forzatamente tutti gli oggetti insieme all'eseguibile finale.

3) Stampa le informazioni di debug usando l'opzione -d

Se vuoi un resoconto dettagliato di cosa fa effettivamente il comando make quando viene eseguito, usa l'opzione -d.

Ecco un esempio :

$ make -d | more
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-pc-linux-gnu
Reading makefiles...
Reading makefile `Makefile'...
Updating makefiles....
Considering target file `Makefile'.
Looking for an implicit rule for `Makefile'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.o'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.c'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.cc'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.C'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.cpp'.
Trying pattern rule with stem `Makefile'.
--More--

È un output lungo. Puoi vedere che ho usato il altro comando per visualizzare l'output pagina per pagina. Devi vederlo di persona per avere un'idea migliore dei dettagli che questa opzione è in grado di produrre.

4) Cambia la directory usando l'opzione -C

Puoi fornire un percorso di directory diverso al comando make, a cui passerebbe prima di cercare un Makefile.

Ecco un esempio. Supponiamo che tu sia attualmente in questa directory :

$ ls
file file2 frnd frnd1.cpp log1.txt log3.txt log5.txt
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt

Ma vuoi eseguire make con il Makefile conservato in ../make-dir/. Quindi ecco cosa devi fare :

$ make -C ../make-dir/
make: Entering directory `/home/himanshu/practice/make-dir'
make: Nothing to be done for `all'.
make: Leaving directory `/home/himanshu/practice/make-dir'

Quindi puoi vedere che il comando make è passato alla directory specificata, eseguito lì e quindi ripristinato.

5) Tratta qualsiasi altro file come 'Makefile' tramite l'opzione -f

Se vuoi rinominare il tuo Makefile in 'my_makefile' o qualsiasi altro nome, e vuoi che il comando make lo tratti come il predefinito 'Makefile', puoi usare l'opzione -f per questo.

Ecco un esempio :

make -f my_makefile

In questo modo il comando make selezionerà e analizzerà my_makefile invece di Makefile.


Linux
  1. Comando di spegnimento di Linux spiegato con esempi

  2. Il comando nslookup Linux spiegato con esempi

  3. Comando Traceroute di Linux, spiegato con esempi

  4. Comando JQ in Linux con esempi

  5. comando whoami in Linux spiegato con esempi

Comando Bash Echo spiegato con esempi in Linux

Il comando Tr in Linux spiegato con esempi

w Comando spiegato con esempi in Linux

Spiegazione del comando tee di Linux (con esempi)

Spiegazione del comando csplit di Linux (con esempi)

Linux make Command con esempi