Jaka jest różnica między gmake i make?

129

Próbuję zrozumieć różnicę między „gmake” a „make”?

Na moim Linuksie są identyczne:

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

Zgaduję, że to nie jest to samo na wszystkich platformach? Czy istnieje dobry powód, aby używać jednego nad drugim?
Czy istnieje jakieś historyczne znaczenie, dlaczego istnieją te dwie nazwy?

Nick Haddad
źródło

Odpowiedzi:

168

„gmake” odnosi się konkretnie do marki GNU. „make” odnosi się do domyślnej implementacji make systemu; w większości dystrybucji Linuksa jest to marka GNU, ale w innych unixach może odnosić się do innej implementacji make, takiej jak BSD make, lub implementacje make różnych komercyjnych unixów.

Język akceptowany przez GNU make jest nadzbiorem języka obsługiwanego przez tradycyjne narzędzie make.

Korzystając w szczególności z 'gmake', możesz używać rozszerzeń GNU make bez obawy, że zostaną błędnie zinterpretowane przez inną implementację make.

bdonlan
źródło
27
dobra odpowiedź. zauważ, że ta sama konwencja obowiązuje dla gcc i cc
Tim Hoolihan
Dzięki chłopaki, to ma sens! Dzięki za wyjaśnienie tego.
Nick Haddad
4
Dotyczy to również innych gtools: na przykład gawk i gtar to te, które powodują potknięcie ludzi w Solarisie.
Dan Davies Brackett
2
GNU Make nie przedstawia kompatybilnego zestawu funkcji w swoich rozszerzeniach językowych. Na przykład $ ^ nie istnieje w gmake (1), ale istnieje w pmake (1) z BSD. Może to prowadzić do katastrofalnych rezultatów podczas próby napisania pliku Makefile, który może być używany zarówno przez GNU Make, jak i pmake (wymyślony nieszkodliwy przykład, wyobraź sobie: gcc -o $@ $<= brak źródeł wejściowych z gmake, ponieważ $ <jest wynikiem pustego ciągu. Istnieją gorsze kombinacje, które mogą skutkować w plikach clobbering gcc).
Sean
2
@Sean O co chodzi $^? Zmienna o tej nazwie na pewno istnieje w GNU make, io ile mogę powiedzieć, jest kompatybilny ze starszymi wykonania. Czy semantyka w BSD jest inna?
tripleee
10

W moim systemie nie ma różnicy (gmake to miękki link do zrobienia):

-> 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 to skrót od GNU make. Istnieją różne implementacje marki. Na maszynie z Linuksem najprawdopodobniej zrobić wolę GNU i aby ułatwić życie użytkownika, jest miękko powiązane z gmake.

dimba
źródło
2

Zwykłym „przeciwieństwem” gmakejest BSD make, który, co nie jest makezaskakujące, zwykle będzie występował w systemach BSD. Jeśli chcesz zobaczyć, jak wygląda BSD, w pochodnych Debiana jest dostępny jako apt-get install pmake.

chaos
źródło
3
Dlaczego pmakenie jest zaskakujące, że BSD jest zrobione? >. <
stackoverflowuser95
Nie jest zaskoczeniem, że domyślna marka jest tworzona przez BSD w systemach BSD.
Mongus Pong,
-3

Najwyraźniej marka GNU jest teraz praktycznie uniwersalna , więc prawie nigdy nie powinno być różnicy.

Paul Biggar
źródło
2
O ile nie jest używana inna wersja marki, w takim przypadku powinna być różnica.
8
Cóż ... musisz powiedzieć - marka GNU jest teraz praktycznie uniwersalna w systemach LINUX. Powiedzmy, że BSD używa własnej marki, która ma inną składnię itp.
Alex