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

Linux-make-Befehl mit Beispielen erklärt

Die Marke Befehl in Linux ist einer der am häufigsten verwendeten Befehle von Systemadministratoren und Programmierern. Während es Administratoren beim Kompilieren und Installieren vieler Open-Source-Dienstprogramme über die Befehlszeile hilft, verwenden Programmierer es, um die Kompilierung ihrer großen und komplizierten Projekte zu verwalten. In diesem Artikel besprechen wir die interne Funktionsweise von make Befehl zusammen mit einigen praktischen Beispielen.

Wie machen Befehl funktioniert

Für diejenigen, die es nicht wissen, akzeptiert der Befehl make Ziele als Befehlszeilenargumente. Diese Ziele werden normalerweise in einer Datei namens 'Makefile' angegeben, die auch die zugehörige Aktion enthält, die den Zielen entspricht. Weitere Informationen finden Sie in unserer Artikelserie zur Funktionsweise von Makefiles.

Wenn der make-Befehl zum allerersten Mal ausgeführt wird, durchsucht er das Makefile, um das (mitgelieferte) Ziel zu finden, und liest dann seine Abhängigkeiten. Wenn diese Abhängigkeiten selbst Ziele sind, durchsucht es das Makefile nach diesen Zielen und erstellt ihre Abhängigkeiten (falls vorhanden) und erstellt sie dann. Sobald die Hauptabhängigkeiten erstellt sind, wird das Hauptziel erstellt (das an den make-Befehl übergeben wurde).

Angenommen, Sie nehmen nur Änderungen an einer Quelldatei vor und führen den make-Befehl erneut aus, dann werden nur die Objektdateien kompiliert, die dieser Quelldatei entsprechen, und daher viel Zeit beim Kompilieren der endgültigen ausführbaren Datei sparen.

Befehlsbeispiele erstellen

Hier sind die Details der für diesen Artikel verwendeten Testumgebung:

  • Betriebssystem – Ubuntu 13.04
  • Shell – Bash 4.2.45
  • Anwendung – GNU Make 3.81

Im Folgenden sind die Inhalte des Projekts aufgeführt:

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

und hier sind die Inhalte des Makefiles:

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

Sehen wir uns nun einige Beispiele für die Verwendung des make-Befehls unter Linux an.

1) Ein einfaches Beispiel

Um das Projekt zu kompilieren, können Sie entweder einfach 'make' verwenden oder das Ziel 'all' mit dem make-Befehl verwenden.

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

Sie können also sehen, dass der make-Befehl zuerst die Abhängigkeiten erstellt und dann das eigentliche Ziel.

Wenn Sie sich den Inhalt des Verzeichnisses ansehen, befinden sich darin .o-Dateien und ausführbare Dateien:

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

Nehmen wir nun an, Sie nehmen einige Änderungen in test.c vor und kompilieren das Projekt mit make :

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

Sie können also sehen, dass nur test.o neu kompiliert wird, während ein anderes Test.o nicht neu kompiliert wird.

Um nun alle Objektdateien zusammen mit der ausführbaren Datei „test“ zu bereinigen, können Sie das Ziel „clean“ verwenden:

$ make clean
rm -rf *.o test

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

Sie können also sehen, dass alle .o-Dateien und die ausführbare Datei „test“ gelöscht wurden.

2) Machen Sie immer alle Ziele durch die Option -B

Inzwischen wissen Sie wahrscheinlich, dass der make-Befehl die Dateien nicht kompiliert, die sich seit dem letzten Mal nicht geändert haben. Wenn Sie jedoch das Standardverhalten von make überschreiben möchten, können Sie die Option -B verwenden.

Hier ist ein Beispiel:

$ 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

Sie können also sehen, dass, während der Befehl „make“ keine Datei kompiliert hat, „make -B“ alle Objekte zusammen mit der endgültigen ausführbaren Datei zwangsweise kompiliert hat.

3) Debugging-Informationen mit der Option -d ausgeben

Wenn Sie einen detaillierten Bericht darüber wünschen, was der Befehl make tatsächlich tut, wenn er ausgeführt wird, verwenden Sie die Option -d.

Hier ist ein Beispiel:

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

Es ist eine lange Ausgabe. Sie können sehen, dass ich mehr verwendet habe Befehl, um die Ausgabe Seite für Seite anzuzeigen. Sie müssen es selbst sehen, um eine bessere Vorstellung von den Details zu bekommen, die diese Option erzeugen kann.

4) Ändern Sie das Verzeichnis mit der Option -C

Sie können dem make-Befehl einen anderen Verzeichnispfad angeben, zu dem er wechseln würde, bevor er nach einem Makefile sucht.

Hier ist ein Beispiel. Angenommen, Sie befinden sich derzeit in diesem Verzeichnis:

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

Aber Sie möchten make mit dem Makefile ausführen, das sich unter ../make-dir/ befindet. Hier ist also, was Sie tun müssen:

$ 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'

Sie können also sehen, dass der make-Befehl in das angegebene Verzeichnis gewechselt, dort ausgeführt und dann wieder zurückgewechselt wurde.

5) Behandle jede andere Datei als 'Makefile' durch die Option -f

Wenn Sie Ihr Makefile umbenennen möchten, sagen wir 'my_makefile' oder irgendeinen anderen Namen, und möchten, dass der make-Befehl es wie das standardmäßige 'Makefile' behandelt, können Sie dafür die Option -f verwenden.

Hier ist ein Beispiel:

make -f my_makefile

Auf diese Weise wird der make-Befehl my_makefile anstelle von Makefile auswählen und scannen.


Linux
  1. Befehl zum Herunterfahren von Linux mit Beispielen erklärt

  2. nslookup Linux-Befehl mit Beispielen erklärt

  3. Linux Traceroute-Befehl, erklärt mit Beispielen

  4. JQ-Befehl in Linux mit Beispielen

  5. whoami-Befehl in Linux mit Beispielen erklärt

Bash Echo-Befehl mit Beispielen in Linux erklärt

Tr-Befehl in Linux mit Beispielen erklärt

w Befehl mit Beispielen in Linux erklärt

Linux tee-Befehl erklärt (mit Beispielen)

Linux csplit Befehl erklärt (mit Beispielen)

Linux-make-Befehl mit Beispielen