Qual é a diferença entre gmake e make?

127

Estou tentando entender a diferença entre 'gmake' e 'make'?

Na minha caixa linux eles são idênticos:

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

Eu estou supondo que isso não é o mesmo em todas as plataformas? Existe um bom motivo para usar um sobre o outro?
Existe algum significado histórico para o porquê dos dois nomes?

Nick Haddad
fonte

Respostas:

166

'gmake' refere-se especificamente ao GNU make. 'make' refere-se à implementação de make padrão do sistema; na maioria das distribuições Linux, isso é GNU make, mas em outros unixes, pode se referir a alguma outra implementação do make, como o BSD make, ou as implementações make de vários unixes comerciais.

O idioma aceito pelo GNU make é um superconjunto do que é suportado pelo utilitário make tradicional.

Ao usar o 'gmake' especificamente, você pode usar o GNU make extensions sem se preocupar com o fato de serem mal interpretados por alguma outra implementação do make.

bdonlan
fonte
27
boa resposta. note que a mesma convenção segue para gcc e cc
Tim Hoolihan
Obrigado pessoal, isso faz sentido! Obrigado por esclarecer isso.
23411 Nick Haddad
4
Isso também se aplica a outros gtools: gawk e gtar, por exemplo, são aqueles que enganam as pessoas no Solaris.
Dan Davies Brackett
2
O GNU Make não apresenta um superconjunto de recursos compatível em suas extensões de idioma. $ ^, por exemplo, não existe no gmake (1), mas existe no pmake do BSD (1). Isso pode levar a resultados desastrosos ao tentar escrever um Makefile que pode ser usado pelo GNU Make e pelo pmake (exemplo inofensivo artificial, imagine: gcc -o $@ $<= nenhuma fonte de entrada com o gmake porque $ <avalia como uma string vazia. Existem combinações piores que podem resultar em arquivos clobbering do gcc).
24411 Sean
2
@Sean O que é isso $^? Uma variável com esse nome certamente existe no GNU Make, e até onde eu sei é compatível com o Make herdado. A semântica no BSD torna diferente?
tripleee
10

No meu sistema, não há diferença (o gmake é um link simples para criar):

-> 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 significa GNU make. Existem diferentes implementações de make. Na máquina Linux, provavelmente o make will pelo GNU e para tornar a vida do usuário mais fácil, o make está vinculado ao gmake.

dimba
fonte
2

O "oposto" usual gmakeé o BSD make, que tenderá a ser makenos sistemas BSD, sem surpresa. Se você quiser ver como é a aparência do BSD, nos derivados do Debian está disponível como apt-get install pmake.

caos
fonte
3
Por que o pmakeBSD é surpreendente? >. <
stackoverflowuser95
Make padrão é surpreendentemente o BSD make nos sistemas BSD.
Mongo Pong
-3

Aparentemente, o GNU make é praticamente universal agora , então quase nunca deve haver diferença.

Paul Biggar
fonte
2
A menos que uma versão diferente do make seja usada, nesse caso, deve haver uma diferença.
8
Bem ... você precisa dizer - o GNU make é praticamente universal agora nos sistemas LINUX. Say BSD está usando seu próprio make que tem uma sintaxe diferente, etc.
Alex