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?

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.


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.


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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.