Quelle est la différence entre gmake et make?

127

J'essaie de comprendre la différence entre «gmake» et «make»?

Sur ma boîte Linux, ils sont identiques:

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

Je suppose que ce n'est pas la même chose sur toutes les plateformes? Y a-t-il une bonne raison d'utiliser l'un sur l'autre?
Y a-t-il une signification historique à la raison pour laquelle il y a les deux noms?

Nick Haddad
la source

Réponses:

166

«gmake» fait spécifiquement référence à GNU make. «make» fait référence à l'implémentation make par défaut du système; sur la plupart des distributions Linux, c'est GNU make, mais sur d'autres unix, cela pourrait faire référence à une autre implémentation de make, telle que BSD make, ou les implémentations make de divers unix commerciaux.

Le langage accepté par GNU make est un sur-ensemble de celui pris en charge par l'utilitaire make traditionnel.

En utilisant spécifiquement 'gmake', vous pouvez utiliser les extensions GNU make sans vous soucier qu'elles soient mal interprétées par une autre implémentation make.

bdonlan
la source
27
bonne réponse. notez que la même convention suit pour gcc et cc
Tim Hoolihan
Merci les gars, cela a du sens! Merci d'avoir clarifié cela.
Nick Haddad
4
Cela s'applique également à d'autres gtools: gawk et gtar, par exemple, sont ceux qui font trébucher les gens sur Solaris.
Dan Davies Brackett
2
GNU Make ne présente pas de sur-ensemble compatible de fonctionnalités dans ses extensions de langage. $ ^, par exemple, n'existe pas dans gmake (1), mais existe dans pmake (1) de son BSD. Cela peut conduire à des résultats désastreux lorsque vous essayez d'écrire un Makefile qui peut être utilisé à la fois par GNU Make et pmake (exemple artificiel inoffensif, imaginez: gcc -o $@ $<= pas de sources d'entrée avec gmake car $ <évalue une chaîne vide. Il existe de pires combinaisons qui peuvent en résulter dans les fichiers clobbering gcc).
Sean
2
@Sean De quoi s'agit-il $^? Une variable portant ce nom existe certainement dans GNU Make, et pour autant que je sache, elle est compatible avec l'ancienne version de Make. La sémantique de BSD Make est-elle différente?
tripleee
10

Sur mon système aucune différence (gmake est un lien souple à faire):

-> 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 signifie GNU make. Il existe différentes implémentations de make. Sur une machine Linux, make will très probablement par GNU et pour rendre la vie de l'utilisateur plus agréable, make est lié à gmake.

dimba
la source
2

L '«opposé» habituel gmakeest BSD make, qui aura tendance à être makesur les systèmes BSD, sans surprise. Si vous voulez voir à quoi ressemble BSD, sur les dérivés Debian, il est disponible en tant que apt-get install pmake.

le chaos
la source
3
Pourquoi pmakeBSD fait-il sans surprise? >. <
stackoverflowuser95
La marque par défaut est sans surprise la marque BSD sur les systèmes BSD.
Mongus Pong
-3

Apparemment, GNU make est pratiquement universel maintenant , donc il ne devrait presque jamais y avoir de différence.

Paul Biggar
la source
2
Sauf si une version différente de make est utilisée, auquel cas il devrait y avoir une différence.
8
Eh bien ... vous devez dire - GNU make est pratiquement universel maintenant sur les systèmes LINUX. Disons que BSD utilise sa propre marque qui a une syntaxe différente, etc.
Alex