![如何判断 makefile 中是否使用了 GNU make?](https://linux22.com/image/69797/%E5%A6%82%E4%BD%95%E5%88%A4%E6%96%AD%20makefile%20%E4%B8%AD%E6%98%AF%E5%90%A6%E4%BD%BF%E7%94%A8%E4%BA%86%20GNU%20make%EF%BC%9F.png)
我知道 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