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 distros ส่วนใหญ่นี่คือ GNU make แต่ใน unixes อื่น ๆ อาจอ้างถึงการนำ make อื่น ๆ มาใช้เช่น BSD make หรือการใช้งาน unixes เชิงพาณิชย์ต่างๆ

ภาษาที่ GNU ยอมรับเป็นภาษาที่รองรับโดยยูทิลิตี้ make แบบดั้งเดิม

ด้วยการใช้ 'gmake' โดยเฉพาะคุณสามารถใช้ GNU สร้างส่วนขยายได้โดยไม่ต้องกังวลว่าพวกเขาจะถูกตีความผิดโดยการใช้งาน make อื่น ๆ


27
คำตอบที่ดี. โปรดทราบว่าการประชุมเดียวกันตามมาสำหรับ gcc และ cc
Tim Hoolihan

ขอบคุณพวกนี้เข้าท่า! ขอขอบคุณที่แก้ไขปัญหานี้
Nick Haddad

4
นอกจากนี้ยังใช้กับ gtools อื่น ๆ เช่น gawk และ gtar เป็นสิ่งที่นำผู้คนขึ้นไปบน Solaris
Dan Davies Brackett

2
GNU Make ไม่นำเสนอชุดคุณสมบัติพิเศษที่เข้ากันได้ในส่วนขยายภาษา ตัวอย่างเช่น $ ^ ไม่มีอยู่ใน gmake (1) แต่มีใน pmake ของ BSD (1) สิ่งนี้สามารถนำไปสู่ผลลัพธ์ที่หายนะเมื่อพยายามเขียน Makefile ที่สามารถใช้ได้ทั้ง GNU Make และ pmake (ตัวอย่างที่ไม่เป็นอันตรายในการสร้างจินตนาการ: gcc -o $@ $<= ไม่มีแหล่งอินพุตด้วย gmake เนื่องจาก $ <ประเมินเป็นสตริงว่างมีชุดค่าผสมที่แย่กว่าซึ่งอาจทำให้ได้ ในไฟล์ gcc clobbering)
ฌอน

2
@ ฌอนนี่มันเรื่อง$^อะไร? ตัวแปรที่มีชื่อที่แน่นอนอยู่ใน GNU ยี่ห้อและเท่าที่ผมสามารถบอกได้ว่าเข้ากันได้กับมรดกยี่ห้อ ความหมายใน BSD ทำให้แตกต่างกันหรือไม่?
tripleee

10

ในระบบของฉันไม่มีความแตกต่าง (gmake คือ soft link ที่จะสร้าง):

-> 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 มีการใช้งานที่แตกต่างกันไป บนเครื่อง Linux ส่วนใหญ่จะทำโดย GNU และเพื่อให้ชีวิตของผู้ใช้มีความเชื่อมโยงกับ gmake


2

"ตรงกันข้าม" ตามปกติgmakeคือ BSD makeซึ่งมีแนวโน้มที่จะmakeอยู่ในระบบ BSD ซึ่งไม่น่าแปลกใจ หากคุณต้องการดูว่า BSD เป็นอย่างไรในตราสารอนุพันธ์ Debian มีให้ในรูปแบบapt-get install pmake.


3
เหตุใดpmakeBSD จึงไม่น่าแปลกใจ >. <
stackoverflowuser95

ค่าเริ่มต้นคือ BSD ทำในระบบ BSD อย่างไม่น่าแปลกใจ
Mongus Pong

-3

เห็นได้ชัดว่า GNU make เป็นสากลในทางปฏิบัติดังนั้นแทบจะไม่แตกต่างกันเลย


2
เว้นแต่จะใช้ make รุ่นอื่นซึ่งในกรณีนี้ควรมีความแตกต่าง

8
คุณต้องบอกว่า - GNU make เป็นสากลในระบบ LINUX สมมติว่า BSD ใช้ยี่ห้อของตัวเองซึ่งมีไวยากรณ์ที่แตกต่างกัน ฯลฯ
Alex
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.