如何判断 makefile 中是否使用了 GNU make?

如何判断 makefile 中是否使用了 GNU make?

我知道 GNU Make 是迄今为止最常用的,但我正在寻找一种方法来验证 GNU Make 是正在使用的实际 make 程序。是否有一个特殊变量可以从 Makefile 中打印,例如:

@echo "$(MAKE_VERSION)"

如果我同时安装了 GNU Make 和其他变体怎么办?

which make
/usr/bin/make

答案1

使用:

$(MAKE) --version

在这里工作。我的输出是:

make --version
GNU Make 3.82
Built for i686-pc-linux-gnu
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

答案2

来自GNU 制作手册:

默认情况下,当 make 查找 makefile 时,它​​会按顺序尝试以下名称:GNUmakefile、makefile 和 Makefile。

因此,如果您将 make 文件命名为GNUmakefile,那么您应该保证它只能被 GNU make 读取,而不能被任何其他 make 读取。

答案3

这里我发现在 makefile 中这样做的唯一方法是

  ifeq (3.81,$(firstword $(sort $(MAKE_VERSION) 3.81)))
    # stuff that requires make-3.81 or higher
  endif

相关内容