Apa perbedaan antara gmake dan make?

127

Saya mencoba memahami perbedaan antara 'gmake' dan 'make'?

Pada kotak linux saya mereka identik:

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

Saya kira ini tidak sama di semua platform? Apakah ada alasan yang baik untuk menggunakan salah satunya?
Apakah ada signifikansi historis mengapa ada dua nama?

Nick Haddad
sumber

Jawaban:

166

'gmake' merujuk secara khusus pada pembuatan GNU. 'make' mengacu pada implementasi standar dari sistem make; pada kebanyakan distro Linux, ini adalah GNU make, tetapi pada unix lain, ini bisa merujuk ke beberapa implementasi make lainnya, seperti make BSD, atau implementasi make dari berbagai unix komersial.

Bahasa yang diterima oleh GNU make adalah superset dari bahasa yang didukung oleh utilitas make tradisional.

Dengan menggunakan 'gmake' secara khusus Anda dapat menggunakan ekstensi membuat GNU tanpa khawatir akan disalahtafsirkan oleh beberapa implementasi make lainnya.

omong kosong
sumber
27
jawaban yang bagus. perhatikan bahwa konvensi yang sama mengikuti untuk gcc dan cc
Tim Hoolihan
Terima kasih teman-teman, ini masuk akal! Terima kasih sudah membereskannya.
Nick Haddad
4
Ini juga berlaku untuk gtools lain: gawk dan gtar, misalnya, adalah yang membuat orang tersandung Solaris.
Dan Davies Brackett
2
GNU Make tidak menyajikan superset fitur yang kompatibel dalam ekstensi bahasanya. $ ^, misalnya tidak ada di gmake (1), tetapi ada di pmake BSD-nya (1). Ini dapat menyebabkan hasil yang sangat buruk ketika mencoba menulis Makefile yang dapat digunakan oleh GNU Make dan pmake (contoh yang dibuat tidak berbahaya, bayangkan: gcc -o $@ $<= tidak ada sumber input dengan gmake karena $ <mengevaluasi ke string kosong. Lebih buruk ada kombinasi yang dapat menghasilkan dalam file clobbering gcc).
Sean
2
@Sean Apa ini $^? Sebuah variabel dengan nama yang pasti ada di GNU Membuat, dan sejauh yang saya tahu adalah kompatibel dengan warisan Membuat. Apakah semantik dalam BSD berbeda?
tripleee
10

Di sistem saya tidak ada perbedaan (gmake soft link to make):

-> 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 singkatan dari GNU make. Ada berbagai implementasi make. Di mesin Linux, kemungkinan besar membuat kehendak oleh GNU dan untuk membuat hidup pengguna lebih mudah dikaitkan dengan gmake.

dimba
sumber
2

"Kebalikan" biasanya gmakeadalah BSD make, yang cenderung makepada sistem BSD, tidak mengejutkan. Jika Anda ingin melihat seperti apa BSD itu, pada Debian derivatif itu tersedia apt-get install pmake.

kekacauan
sumber
3
Mengapa pmakeBSD tidak mengejutkan? >. <
stackoverflowuser95
Make default adalah make BSD yang tidak mengejutkan pada sistem BSD.
Mongus Pong
-3

Rupanya, GNU make secara universal sekarang , jadi seharusnya hampir tidak pernah ada perbedaan.

Paul Biggar
sumber
2
Kecuali jika versi make yang berbeda digunakan dalam hal ini seharusnya ada perbedaan.
8
Nah ... Anda perlu mengatakan - GNU make secara praktis universal sekarang DI sistem LINUX. Katakanlah BSD menggunakan buatan sendiri yang memiliki sintaks yang berbeda, dll.
Alex