Sự khác biệt giữa gmake và make là gì?


127

Tôi đang cố gắng để hiểu sự khác biệt giữa 'gmake' và 'make'?

Trên hộp linux của tôi chúng giống hệt nhau:

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

Tôi đoán điều này không giống nhau trên tất cả các nền tảng? Có một lý do tốt để sử dụng cái này hơn cái kia không?
Có một số ý nghĩa lịch sử tại sao có hai tên?

Câu trả lời:


166

'gmake' đề cập cụ thể đến GNU make. 'Make' đề cập đến việc thực hiện mặc định của hệ thống; trên hầu hết các bản phân phối Linux, đây là GNU make, nhưng trên các bản unix khác, nó có thể đề cập đến một số cách thực hiện khác, chẳng hạn như BSD make, hoặc thực hiện các bản unix thương mại khác nhau.

Ngôn ngữ được GNU make chấp nhận là một siêu ngôn ngữ được hỗ trợ bởi tiện ích tạo truyền thống.

Bằng cách sử dụng 'gmake' một cách cụ thể, bạn có thể sử dụng GNU tạo các tiện ích mở rộng mà không lo chúng bị hiểu sai bởi một số thực hiện khác.


27
câu trả lời tốt. lưu ý rằng quy ước tương tự như sau đối với gcc và cc
Tim Hoolihan

Cảm ơn các bạn, điều này có ý nghĩa! Cảm ơn cho thanh toán bù trừ này lên.
Nick Haddad

4
Nó cũng áp dụng cho các gtools khác: ví dụ như gawk và gtar, là những thứ khiến mọi người gặp phải trên Solaris.
Dan Davies Brackett

2
GNU Make không trình bày một siêu tính năng tương thích trong các phần mở rộng ngôn ngữ của nó. $ ^, ví dụ, không tồn tại trong gmake (1), nhưng thực hiện trong pmake của BSD (1). Điều này có thể dẫn đến kết quả thảm hại khi cố gắng viết một Makefile có thể được sử dụng bởi cả GNU Make và pmake (ví dụ vô hại, hãy tưởng tượng: gcc -o $@ $<= không có nguồn đầu vào nào có gmake vì $ <đánh giá thành một chuỗi rỗng. trong tập tin ghi đè gcc).
Sean

2
@Sean Điều này là về $^cái gì? Một biến có tên đó chắc chắn tồn tại trong GNU Make và theo như tôi có thể nói là tương thích với Make Make kế thừa. Các ngữ nghĩa trong BSD có khác nhau không?
tripleee

10

Trên hệ thống của tôi không có sự khác biệt (gmake là liên kết mềm để thực hiện):

-> 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 là viết tắt của GNU make. Có nhiều cách thực hiện khác nhau. Trên máy Linux, hầu hết có thể thực hiện theo ý muốn của GNU và để làm cho cuộc sống của người dùng trở nên mềm mại hơn được liên kết với gmake.


2

"Đối lập" thông thường gmakelà BSD make, sẽ có xu hướng maketrên các hệ thống BSD, không có gì đáng ngạc nhiên. Nếu bạn muốn xem BSD tạo ra như thế nào, trên các dẫn xuất Debian, nó có sẵn dưới dạng apt-get install pmake.


3
Tại sao pmakeBSD không ngạc nhiên? >. <
stackoverflowuser95

BSD mặc định là không đáng ngạc nhiên BSD thực hiện trên các hệ thống BSD.
Mongus Pong

-3

Rõ ràng, GNU make thực tếphổ biến hiện nay , vì vậy hầu như không bao giờ có sự khác biệt.


2
Trừ khi một phiên bản khác của make được sử dụng trong trường hợp đó sẽ có sự khác biệt.

8
Chà ... bạn cần phải nói - GNU make hiện đang thực sự phổ biến trên các hệ thống LINUX. Giả sử BSD đang sử dụng chính nó có cú pháp khác nhau, v.v.
Alex
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.