В чем разница между gmake и make?

127

Я пытаюсь понять разницу между gmake и make?

На моем Linux-сервере они идентичны:

% 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 по умолчанию; в большинстве дистрибутивов Linux это GNU make, но в других unix-системах это может относиться к какой-либо другой реализации make, такой как BSD make, или реализациям make различных коммерческих unix-файлов.

Язык, принятый программой make GNU, является надмножеством языка, поддерживаемого традиционной утилитой make.

Специально используя 'gmake', вы можете использовать расширения GNU make, не беспокоясь о том, что они будут неправильно истолкованы какой-либо другой реализацией make.

bdonlan
источник
27
хороший ответ. обратите внимание, что такое же соглашение следует для gcc и cc
Тим Хулихан
Спасибо, ребята, в этом есть смысл! Спасибо, что прояснили это.
Nick Haddad
4
Это также применимо к другим gtools: gawk и gtar, например, те, которые сбивают с толку людей в Solaris.
Дэн Дэвис Брэкетт
2
GNU Make не предоставляет совместимого расширенного набора функций в своих расширениях языка. $ ^, например, не существует в gmake (1), но существует в его BSD pmake (1). Это может привести к катастрофическим результатам при попытке написать Makefile, который может использоваться как GNU Make, так и pmake (надуманный безобидный пример, представьте: gcc -o $@ $<= нет источников ввода с gmake, потому что $ <оценивается как пустая строка. Существуют худшие комбинации, которые могут привести к в файлах gcc clobbering).
Шон
2
@ Шон Что это $^? Переменная с таким именем , конечно , существует в 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-машине, скорее всего, make будет от GNU, а для облегчения жизни пользователя make софт связан с gmake.

dimba
источник
2

Обычная «противоположность» gmake- это BSD make, которая, как правило, присутствует makeв системах BSD, что неудивительно. Если вы хотите увидеть, на что похожа BSD make, на производных от Debian она доступна как apt-get install pmake.

хаос
источник
3
Почему pmakeнеудивительно, что BSD make? >. <
stackoverflowuser95
Неудивительно, что make по умолчанию используется в BSD-системах.
Mongus Pong
-3

Судя по всему, GNU make теперь практически универсален , так что почти никогда не должно быть разницы.

Пол Биггар
источник
2
Если не используется другая версия make, в этом случае должна быть разница.
8
Что ж ... вы должны сказать - GNU make теперь практически универсален в системах LINUX. Скажем, BSD использует собственный make с другим синтаксисом и т. Д.
Alex