Was ist der Unterschied zwischen gmake und make?

127

Ich versuche den Unterschied zwischen "gmake" und "make" zu verstehen.

Auf meiner Linux-Box sind sie identisch:

% gmake --version
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.

% make --version
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.

Ich vermute, dass dies nicht auf allen Plattformen gleich ist? Gibt es einen guten Grund, einen über den anderen zu verwenden?
Gibt es eine historische Bedeutung dafür, warum es die beiden Namen gibt?

Nick Haddad
quelle

Antworten:

166

'gmake' bezieht sich speziell auf GNU make. 'make' bezieht sich auf die Standard-make-Implementierung des Systems. In den meisten Linux-Distributionen ist dies GNU make, in anderen Unixen kann es sich jedoch um eine andere Implementierung von make handeln, z. B. BSD make, oder um die make-Implementierungen verschiedener kommerzieller Unixe.

Die von GNU make akzeptierte Sprache ist eine Obermenge derjenigen, die vom traditionellen make-Dienstprogramm unterstützt wird.

Wenn Sie speziell 'gmake' verwenden, können Sie GNU make-Erweiterungen verwenden, ohne sich Sorgen machen zu müssen, dass sie von einer anderen make-Implementierung falsch interpretiert werden.

bdonlan
quelle
27
gute Antwort. Beachten Sie, dass die gleiche Konvention für gcc und cc folgt
Tim Hoolihan
Danke Jungs, das macht Sinn! Danke, dass du das geklärt hast.
Nick Haddad
4
Dies gilt auch für andere gtools: gawk und gtar sind beispielsweise diejenigen, die Menschen auf Solaris stolpern lassen.
Dan Davies Brackett
2
GNU Make bietet in seinen Spracherweiterungen keine kompatible Obermenge von Funktionen. $ ^ existiert zum Beispiel nicht in gmake (1), sondern in pmake (1) seines BSD. Dies kann zu katastrophalen Ergebnissen führen, wenn versucht wird, ein Makefile zu schreiben, das sowohl von GNU Make als auch von pmake verwendet werden gcc -o $@ $<kann in gcc clobbering files).
Sean
2
@ Sean Worum geht es $^? Eine Variable mit diesem Namen existiert sicherlich in GNU Make und ist, soweit ich das beurteilen kann, mit Legacy Make kompatibel. Ist die Semantik in BSD Make anders?
Tripleee
10

Auf meinem System kein Unterschied (gmake ist ein Softlink zu machen):

-> ls -l $(which gmake make)
lrwxrwxrwx 1 root root      4 Jun  5  2007 /usr/bin/gmake -> make
-rwxr-xr-x 1 root root 168976 Jul 13  2006 /usr/bin/make

gmake steht für GNU make. Es gibt verschiedene Implementierungen von make. Auf Linux-Rechnern wird höchstwahrscheinlich ein Wille von GNU erstellt, und um das Leben des Benutzers einfacher zu machen, ist make weich mit gmake verbunden.

dimba
quelle
2

Das übliche "Gegenteil" von gmakeist BSD make, das makeauf BSD-Systemen eher überraschend ist. Wenn Sie sehen möchten, wie BSD aussieht, ist es auf Debian-Derivaten als verfügbar apt-get install pmake.

Chaos
quelle
3
Warum pmakeist es nicht überraschend, dass BSD macht? >. <
stackoverflowuser95
Das Standard-Make ist nicht überraschend das BSD-Make auf BSD-Systemen.
Mongus Pong
-3

Anscheinend ist GNU make jetzt praktisch universell , daher sollte es fast nie einen Unterschied geben.

Paul Biggar
quelle
2
Es sei denn, es wird eine andere Version von make verwendet. In diesem Fall sollte es einen Unterschied geben.
8
Nun ... Sie müssen sagen - GNU make ist jetzt auf LINUX-Systemen praktisch universell. Angenommen, BSD verwendet eine eigene Marke mit unterschiedlicher Syntax usw.
Alex