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.

我猜这在所有平台上都不一样吗?是否有充分的理由要使用一个?
为什么有两个名字,这有一定的历史意义吗?

Answers:


166

“ gmake”专门指GNU make。“ make”是指系统的默认make实现;在大多数Linux发行版中,这是GNU make,但在其他unix上,它可能涉及make的其他实现,例如BSD make或各种商业unix的make实现。

GNU make接受的语言是传统make实用程序支持的语言的超集。

通过专门使用“ gmake”,您可以使用GNU make扩展,而不必担心它们会被其他make实现误解。


27
好答案。请注意,gcc和cc遵循相同的惯例
Tim Hoolihan 09年

谢谢大家,这很有道理!感谢您清理此问题。
尼克·哈达德

4
它也适用于其他gtools:例如,gawk和gtar是在Solaris上使人们绊倒的工具。
丹·戴维斯·布拉基特

2
GNU Make在其语言扩展中未提供兼容的功能超集。例如,$ ^在gmake(1)中不存在,但在其BSD的pmake(1)中存在。尝试编写可同时用于GNU Make和pmake的Makefile时,这可能导致灾难性的结果(人为的无害示例,请想象:gcc -o $@ $<= gmake没有输入源,因为$ <计算为空字符串。存在更糟糕的组合,可能导致在gcc破坏文件中)。
肖恩

2
@Sean这是什么意思$^具有该名称变量确实存在于GNU Make中,据我所知与旧版Make兼容。BSD中的语义是否有所不同?
2014年

10

在我的系统上没有区别(gmake是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代表GNU make。make有不同的实现。在Linux机器上,很有可能是由GNU制定的,而使用户的生活更容易的make与gmake软链接。


2

毫不奇怪,通常与gmakeBSD 相对的是BSD 。如果您想了解BSD的外观,可以在Debian衍生产品上找到。makemakeapt-get install pmake


3
为什么pmakeBSD毫不奇怪?>。<
stackoverflowuser95

毫不奇怪,默认的make是BSD系统上的BSD make。
孟格斯·庞

-3

显然,GNU make 现在几乎是通用的,因此几乎没有区别。


2
除非在这种情况下使用不同版本的make,否则应该有所不同。

8
嗯...您需要说-GNU make在LINUX系统上几乎是通用的。说BSD正在使用具有不同语法等的自家品牌
Alex
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.