Яка різниця між gmake та make?


127

Я намагаюся зрозуміти різницю між "gmake" і "make"?

У моїй linux box вони однакові:

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

Я здогадуюсь, це не однаково на всіх платформах? Чи є вагомі підстави використовувати одне над іншим?
Чи є якесь історичне значення, чому існують ці два імена?

Відповіді:


166

'gmake' стосується конкретно GNU make. 'make' позначає реалізацію системи make make за замовчуванням; для більшості дистрибутивів Linux це GNU, але на інших Unix, це може посилатися на якусь іншу реалізацію make, наприклад BSD make, або на реалізацію різних комерційних unix.

Мова, прийнята GNU make, є сукупністю тієї, яку підтримує традиційна утиліта make.

Використовуючи спеціально 'gmake', ви можете використовувати розширення для створення GNU, не турбуючись про те, що їх інша інтерпретація неправильно трактує.


27
хороша відповідь. зауважте, що ця ж конвенція дотримується і для gcc та cc
Тім Хуліхан

Спасибі, хлопці, це має сенс! Дякуємо, що очистили це.
Нік Хаддад

4
Це стосується також інших gtools: наприклад, gawk та gtar - це ті, хто подорожує людей на Соляріс.
Dan Davies Brackett

2
GNU Make не пропонує сумісний набір функцій у своїх мовних розширеннях. $ ^, наприклад, не існує в gmake (1), але є в pmake свого BSD (1). Це може призвести до катастрофічних результатів при спробі написання Makefile, який може використовуватися як GNU Make, так і pmake (надуманий нешкідливий приклад, уявіть: gcc -o $@ $<= немає джерел введення з gmake, оскільки $ <оцінює порожній рядок. Більш гірші комбінації можуть призвести до у файлах gcc clobbering).
Шон

2
@Sean Про що це $^? Змінна з таким ім'ям , звичайно , існує в GNU Make, і, наскільки я можу сказати , сумісний з успадкованими Make. Чи відрізняються семантика в BSD?
tripleee

10

У моїй системі немає різниці (gmake - це м'яке посилання):

-> 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 означає GNU make. Існують різні реалізації make. На машині Linux, швидше за все, GNU зробить волю, і щоб зробити життя користувача більш ігровим, це пов'язано з gmake.


2

Звичайною "протилежністю" gmakeє BSD make, яка, як правило, буде makeв системах BSD, не дивно. Якщо ви хочете побачити, як виглядає BSD, на похідних Debian він доступний як apt-get install pmake.


3
Чому pmakeне дивно виготовляють BSD? >. <
stackoverflowuser95

За замовчуванням make - це не дивно BSD make в системах BSD.
Mongus Pong

-3

Мабуть, GNU make зараз практично універсальний , тому різниці майже ніколи не повинно бути.


2
Якщо не використовується інша версія марки, в цьому випадку має бути різниця.

8
Ну ... вам потрібно сказати - GNU make є практично універсальним зараз на системах ON LINUX. Скажімо, BSD використовує власний make, який має різний синтаксис тощо.
Alex
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.