GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kannst du es schaffen? Kompilieren Sie C-Programme unter Linux mit dem Make-Befehl

Wenn Sie Software aus dem Quellcode installieren, führen Sie normalerweise Befehle aus wie — „make“, „make install“, „make clean“ usw. Haben Sie sich gefragt, was all diese make-Befehle wirklich bewirken? Sicher, wir wissen, dass es versucht, die Software zu kompilieren und zu installieren. Aber warum machen? Was macht es wirklich?

Zum Kompilieren eines einzelnen C-Programms ist der Befehl cc sehr hilfreich. Zum Kompilieren mehrerer C-Programme ist das Dienstprogramm Make sehr hilfreich.

Auch C-Programmierer und Systemadministratoren werden es hilfreich finden, die kompilierungsbezogenen Aufgaben mit dem Dienstprogramm make zu automatisieren. Lassen Sie uns in diesem Artikel überprüfen, wie der Befehl make verwendet wird.

1. Erstellen Sie das Makefile für eine einfache Kompilierung

Nehmen wir an, Sie haben die Beispiel-C-Programmdatei mit dem Namen helloworld.c. Mit dem cc-Befehl würden Sie es normalerweise wie unten gezeigt kompilieren.

$ cc -o helloworld helloworld.c

Während Sie make nicht zum Kompilieren eines einzelnen Programms verwenden müssen, gibt Ihnen das folgende Beispiel eine Vorstellung davon, wie Sie make verwenden können. Erstellen Sie ein Makefile wie unten gezeigt.

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

Führen Sie make aus, um die ausführbare helloworld-Datei wie unten gezeigt zu erstellen.

$ make helloworld

(or)

$ make

Da das Makefile nur ein Ziel „helloworld“ enthält, können Sie den make-Befehl auch ohne Argumente aufrufen, wie oben gezeigt.“make“.

Bitte achten Sie darauf, dass sowohl Makefile als auch Quellcode im selben Verzeichnis vorhanden sind, ansonsten geben Sie den jeweiligen Pfad der Quelldateien im Makefile an.

Standardmäßig erwartet der make-Befehl, dass der make-Dateiname entweder Makefile ist oder Makefile . Wenn sich der Make-Dateiname von einem dieser beiden unterscheidet, sollten Sie dies mit der Option -f wie unten gezeigt im Make-Befehl angeben.

$ make -f sample.txt

Für diejenigen, die neu bei C sind, lesen Sie den Artikel zum C-Hello-World-Programm.

2. Erstellen Sie das Makefile, um mehr als eine Datei zu kompilieren

Lassen Sie uns für die Kompilierung mehrerer Dateien drei Dateien verwenden — getname.c, getaccno.c und main.c.

Lassen Sie uns basierend auf diesen drei *.c-Dateien eine ausführbare Datei namens „getinto“ erstellen.

Mit dem cc-Befehl würden Sie normalerweise die Kompilierung wie unten gezeigt durchführen.

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

Sie können auch die einzelnen *.c-Dateien wie unten gezeigt zusammenstellen und schließlich die ausführbare „getinfo“-Datei wie unten gezeigt erstellen.

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

Mit unserem benutzerfreundlichen Make-Dienstprogramm können Sie dies wie unten gezeigt effektiv tun.

$ 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 

Führen Sie schließlich den make-Befehl wie unten gezeigt aus.

$ make getinfo 

Hinweis: Jedes Mal, wenn der Befehl make aufgerufen wird, prüft und kompiliert er nur die geänderten Dateien. Dies ist enorm für C-Programmierer, die normalerweise mehrere C-Dateien haben und das gesamte Projekt während der Entwicklungsphase mehrmals kompilieren.

Sie können gdb auch zum Debuggen von C-Programmen verwenden.

3. Ziel für Bereinigungsprozess hinzufügen

Innerhalb des Makefiles (oder Makefiles) können Sie auch ein Ziel hinzufügen, um die Objektdateien zu bereinigen, wie unten gezeigt.

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

Jetzt können Sie die Objektdateien aus dem aktuellen Verzeichnis löschen, wie unten gezeigt.

$ make clean

Hinweis: Statt die einzelne *.o-Datei im rm-Kommando anzugeben, können Sie auch rm *.o angeben.

Sie können auch C-Archivdateien (*.a) mit dem Befehl ar erstellen.

4. Variablenbehandlung im Makefile

Innerhalb von Makefile (oder Makefile) können Sie Variablen verwenden, die im gesamten Makefile verwendet werden können. Ein Verwendungsbeispiel wird unten gezeigt, wobei $obj alle Objektdateinamen enthält.

$ 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. Das Makefile weiter vereinfachen

Das Dienstprogramm Make ruft implizit den Befehl cc -c auf, um .o-Dateien für die entsprechende .c-Datei zu generieren. Wir müssen das „cc -c“ wirklich nicht im Makefile angeben. Also können wir das Makefile umschreiben, um diese implizite Regel widerzuspiegeln, wie unten gezeigt.

$ 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. Debug-Meldungen in Makefile einfügen

Wenn Sie ein großes Projekt kompilieren, möchten Sie vielleicht eine freundliche Nachricht anzeigen. Das Make-Dienstprogramm kann Meldungen auf der Standardausgabe ausgeben, die Ihnen beim Debuggen potenzieller Probleme im Make-Prozess helfen können. Verwenden Sie die @echo-Anweisung in Ihrem gesamten Makefile wie unten gezeigt, um benutzerdefinierte Nachrichten anzuzeigen.

$ 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."	

Hier hast du es. Make ist kein Geheimnis mehr. Wenn Ihnen dieser Artikel gefallen hat, bookmarken Sie ihn bitte in delicious oder stolpern Sie darüber.


Linux
  1. Verwenden des Linux-Sleep-Befehls in Bash-Skripten

  2. So starten Sie Linux über die Befehlszeile neu

  3. Verwenden des Befehls ripgrep (rg) unter Linux

  4. Wie beendet man einen Prozess unter Linux mit dem Befehl?

  5. 5 praktische Linux-Fuser-Befehlsbeispiele

Tutorial zur Verwendung des Timeout-Befehls unter Linux

Benötigen Sie Java? So können Sie es Java unter Linux installieren

Planen Sie Jobs in Linux mit dem Befehl 'at'

Verwenden des Watch-Befehls unter Linux

Kannst du das toppen? 15 praktische Beispiele für Top-Befehle unter Linux

Cut auf Linux Terminal verwenden