2010-01-13 5 views
115

Die meisten Linux-Anwendungen mit kompiliert werden:Woher weiß die "App", welches Standardziel erstellt werden soll, wenn kein Ziel angegeben ist?

make 
make install clean 

Wie ich es verstanden, machen nimmt Namen von Build-Ziele als Argumente. So ist install ein Ziel, das einige Dateien kopiert und danach clean ist ein Ziel, das temporäre Dateien entfernt.

Aber welches Ziel wird make erstellen, wenn keine Argumente angegeben sind (z. B. erster Befehl in meinem Beispiel)?

Antwort

154

Standardmäßig beginnt es mit der Verarbeitung des ersten Ziels, das nicht mit einem '.' Beginnt. aka the default goal; Um dies zu tun, muss es möglicherweise andere Ziele bearbeiten - insbesondere diejenigen, von denen das erste Ziel abhängt. Die GNU make manual deckt all diese Sachen ab und ist eine überraschend einfache und informative Lektüre.

+0

nicht das Ziel „alle“ als vorherige Antwort Staaten? :( – grigoryvp

+3

Nein, nicht das Ziel 'alle'. –

+33

Das erste Ziel 'all' aufzurufen, ist nur eine Konvention. – Tobu

27

Mit GNU Make können Sie auch das Standard-make-Ziel mithilfe einer speziellen Variablen namens .DEFAULT_GOAL angeben. Sie können diese Variable sogar in der Mitte des Makefile aufheben, wodurch das nächste Ziel in der Datei zum Standardziel wird.

Wirklich interessant, aber esoterische Zeug. Aber ich stimme mit anon da oben überein - das gnu make manual ist gut lesbar. Du denkst vielleicht, dass du die meisten Sachen nicht wissen musst, aber wenn du einmal einen wirklich umfassenden Artikel gesehen hast, würdest du wirklich einige wirklich schicke Sachen schätzen, die du damit machen kannst - Stringmanipulation, Datei-/Verzeichnisfunktionen, usw.

Ref: The Gnu Make manual - Special Variables

88

um die anderen ein paar Sekunden zu speichern und sie davor zu bewahren, die das Handbuch zu lesen, hier ist die kurze Antwort. Fügen Sie diese an der Spitze Ihrer Make-Datei:

.DEFAULT_GOAL := mytarget 

mytarget wird nun das Ziel sein, die ausgeführt wird, wenn „make“ ausgeführt wird und kein Ziel angegeben wird.

Wenn Sie eine ältere Version von make (< = 3.80) haben, wird dies nicht funktionieren. Wenn dies der Fall ist, dann können Sie das tun, was Anon erwähnt, einfach diese Datei an die Spitze der Ihr Make hinzufügen:

.PHONY: default 
default: mytarget ; 

Referenzen: https://www.gnu.org/software/make/manual/html_node/How-Make-Works.html

+0

was macht das? – nathanengineer

+0

@nathan Er macht mein Ziel zum Standardziel, wenn jemand "make" ohne Parameter ausführt. – Samuel

+1

Beachten Sie, dass .DEFAULT_GOAL in GNU make v3.80 nicht unterstützt wird, und ich würde auch vorherige Versionen annehmen (v3.81 unterstützt dies jedoch). Wenn Sie eine ältere Version von make ausführen, müssen Sie sicherstellen, dass Ihr Standardziel das erste/oberste Ziel in Ihrer Make-Datei ist. – Samuel

Verwandte Themen