Qual'è la differenza tra gmake e make?


127

Sto cercando di capire la differenza tra 'gmake' e 'make'?

Sulla mia scatola di Linux sono identici:

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

Immagino che questo non sia lo stesso su tutte le piattaforme? C'è un buon motivo per usarne uno sopra l'altro?
C'è qualche significato storico sul perché ci sono i due nomi?

Risposte:


166

'gmake' si riferisce specificamente a GNU make. 'make' si riferisce all'implementazione di default del sistema; sulla maggior parte delle distro Linux questa è GNU make, ma su altri unix, potrebbe riferirsi ad altre implementazioni di make, come BSD make, o alle implementazioni di make di vari unix commerciali.

Il linguaggio accettato da GNU make è un superset di quello supportato dalla tradizionale utility make.

Usando 'gmake' in modo specifico puoi usare GNU make extension senza preoccuparti che vengano interpretate erroneamente da qualche altra implementazione di make.


27
buona risposta. nota che la stessa convenzione segue per gcc e cc
Tim Hoolihan,

Grazie ragazzi, questo ha senso! Grazie per il chiarimento.
Nick Haddad,

4
Si applica anche ad altri gtools: gawk e gtar, per esempio, sono quelli che fanno inciampare le persone su Solaris.
Dan Davies Brackett,

2
GNU Make non presenta un superset compatibile di funzionalità nelle sue estensioni di lingua. $ ^, ad esempio, non esiste in gmake (1), ma in pmake di BSD (1). Questo può portare a risultati disastrosi quando si tenta di scrivere un Makefile che può essere usato sia da GNU Make che da pmake (esempio innocuo inventato, immagina: gcc -o $@ $<= nessuna fonte di input con gmake perché $ <restituisce una stringa vuota. Esistono combinazioni peggiori che possono risultare nei file di clobbering gcc).
Sean,

2
@Sean Di cosa si tratta $^? Una variabile con quel nome esiste sicuramente in GNU Make e, per quanto ne so, è compatibile con Make legacy. La semantica in BSD è diversa?
Tripleee,

10

Sul mio sistema nessuna differenza (gmake è un soft link da creare):

-> 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 sta per GNU make. Esistono diverse implementazioni di make. Sulla macchina Linux molto probabilmente farà la volontà di GNU e per rendere la vita dell'utente più semplice è collegata a gmake.


2

Il solito "opposto" di gmakeè BSD make, che tenderà ad essere makesui sistemi BSD, non sorprende. Se vuoi vedere come è fatto BSD, sui derivati ​​Debian è disponibile come apt-get install pmake.


3
Perché pmakeBSD è sorprendente? >. <
stackoverflowuser95

La marca di default è sorprendentemente la marca BSD sui sistemi BSD.
Mongus Pong,

-3

Apparentemente, GNU make è praticamente universale ora , quindi non dovrebbe esserci quasi alcuna differenza.


2
A meno che non venga utilizzata una versione diversa di make, nel qual caso dovrebbe esserci una differenza.

8
Bene ... devi dire che GNU make è praticamente universale ora sui sistemi LINUX. Supponiamo che BSD stia usando una propria marca che ha una sintassi diversa, ecc.
Alex
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.