GNU/Linux >> Linux Esercitazione >  >> Linux

Puoi farlo? Compila i programmi C su Linux usando Make Command

Quando si installa qualsiasi software dal sorgente, in genere si eseguono comandi come — “make”, “make install”, "make clean", ecc. Vi siete mai chiesti cosa stanno facendo tutti questi comandi make? Certo, sappiamo che sta tentando di compilare e installare il software. Ma perché fare? Che cosa fa veramente?

Per compilare un singolo programma C, il comando cc è molto utile. Per compilare più programmi C, l'utilità Make è molto utile.

Inoltre, i programmatori C e gli amministratori di sistema troveranno utile automatizzare le attività relative alla compilazione utilizzando l'utilità make. In questo articolo, esaminiamo come utilizzare il comando make.

1. Crea il Makefile per una semplice compilazione

Supponiamo che tu abbia il file di programma C di esempio chiamato helloworld.c. Usando il comando cc, in genere lo compileresti come mostrato di seguito.

$ cc -o helloworld helloworld.c

Sebbene non sia necessario utilizzare make per compilare un singolo programma, l'esempio seguente ti darà un'idea su come utilizzare make. Crea un makefile come mostrato di seguito.

$ vim makefile
helloworld : helloworld.c
	cc -o helloworld helloworld.c

Esegui make per creare l'eseguibile helloworld come mostrato di seguito.

$ make helloworld

(or)

$ make

Poiché makefile contiene solo un "helloworld" di destinazione, puoi anche chiamare il comando make senza alcun argomento come mostrato sopra.."make".

Assicurati che sia makefile che il codice sorgente siano presenti nella stessa directory, altrimenti specifica il rispettivo percorso dei file sorgente in makefile.

Per impostazione predefinita, il comando make prevede che il nome del file make sia Makefile o makefile . Se il nome del file make è diverso da uno qualsiasi di questi due, dovresti specificarlo nel comando make usando l'opzione -f come mostrato di seguito.

$ make -f sample.txt

Per coloro che non conoscono C, leggi l'articolo del programma C Hello World.

2. Crea il Makefile per compilare più di un file

Per la compilazione di più file, utilizziamo tre file:getname.c, getaccno.c e main.c.

Sulla base di questi tre file *.c, creiamo un eseguibile chiamato "getinto".

Utilizzando il comando cc, in genere eseguiresti la compilazione come mostrato di seguito.

$ cc -o getinfo main.c getname.c getaccno.c header.h

Puoi anche compilare i singoli file *.c come mostrato di seguito e infine creare l'eseguibile "getinfo" come mostrato di seguito.

$ cc -c getname.c
$ cc -c getaccno.c
$ cc -c main.c
$ cc -o getinfo main.o getname.o getaccno.o header.h

Usando la nostra amichevole utility make, puoi farlo in modo efficace come mostrato di seguito.

$ vim makefile
getinfo:getname.o getaccno.o main.o header.h 
	cc -o getinfo getname.o getaccno.o main.o header.h 
main.o:main.c 
	cc -c main.c 
getaccno.o:getaccno.c 
	cc -c getaccno.c 
getname.o:getname.c 
	cc -c getname.c 

Infine, esegui il comando make come mostrato di seguito.

$ make getinfo 

Nota: Ogni volta che il comando make viene invocato, controlla e compila solo i file modificati. Questo è enorme per i programmatori C, dove in genere hanno più file C e compilano l'intero progetto più volte durante la fase di sviluppo.

Puoi anche usare gdb per eseguire il debug dei programmi C.

3. Aggiungi destinazione per il processo di pulizia

All'interno del makefile (o Makefile), puoi anche aggiungere target per ripulire i file oggetto, come mostrato di seguito.

clean : 
	rm getname.o getaccno.o main.o

Ora puoi pulire i file oggetto dalla directory corrente come mostrato di seguito.

$ make clean

Nota: Invece di specificare il singolo file *.o nel comando rm, puoi anche dare rm *.o.

Puoi anche creare un file di archivio C (*.a) usando il comando ar.

4. Gestione delle variabili nel Makefile

All'interno di makefile (o Makefile) puoi usare variabili, che possono essere usate in tutto il makefile. Di seguito viene mostrato un esempio di utilizzo, dove $obj contiene tutti i nomi dei file oggetto.

$ vim makefile
obj= getname.o getaccno.o main.o
getinfo: $(obj) header.h
	cc -o getinfo getname.o getaccno.o main.o header.h
main.o:main.c
	cc -c main.c
getaccno.o:getaccno.c
	cc -c getaccno.c
getname.o:getname.c
	cc -c getname.c

clean:
	rm getinfo $(obj)

5. Semplificare ulteriormente il Makefile

L'utilità Make richiama implicitamente il comando cc -c per generare file .o per il file .c corrispondente. Non abbiamo davvero bisogno di specificare "cc -c" all'interno del makefile. Quindi, possiamo riscrivere il makefile per riflettere questa regola implicita come mostrato di seguito.

$ vim makefile
obj= getname.o getaccno.o main.o
getinfo: $(obj) header.h
	cc -o getinfo getname.o getaccno.o main.o header.h
main.o:
getaccno.o:
getname.o:
clean:
	rm getinfo $(obj)

6. Inserisci i messaggi di debug all'interno di Makefile

Quando stai compilando un grande progetto, potresti voler visualizzare un messaggio amichevole. L'utilità Make può stampare messaggi sull'output standard, il che potrebbe aiutarti a eseguire il debug di potenziali problemi nel processo di creazione. Usa l'istruzione @echo in tutto il makefile come mostrato di seguito per visualizzare i messaggi personalizzati.

$ vim makefile
obj= getname.o getaccno.o main.o
getinfo: $(obj) header.h
	cc -o getinfo getname.o getaccno.o main.o header.h	
	@echo "make complete."
main.o:
getaccno.o:
getname.o:
clean:
	rm getinfo $(obj)
	@echo "getinfo, $(obj) files are removed."	

Ecco qua. Make non è più un mistero. Se ti è piaciuto questo articolo, aggiungilo ai segnalibri in delicious o fallo inciampare.


Linux
  1. Come eseguire il debug di programmi C in Linux usando gdb

  2. Come riavviare Linux utilizzando la riga di comando

  3. Utilizzo del comando ripgrep (rg) in Linux

  4. Sposta una cartella in Linux usando il comando mv

  5. Come posso trovare la mia versione della shell usando un comando Linux?

Tutorial sull'uso del comando Timeout su Linux

Hai bisogno di Java? Quindi puoi installarlo Java su Linux

Pianifica i lavori in Linux con il comando 'at'

Utilizzo del comando Watch in Linux

Puoi superare questo? 15 Esempi pratici di comandi principali di Linux

Utilizzo di cut su terminale Linux