shell - 获取`make'版本的便携方式

时间:2013-01-13 17:00:24

标签: shell makefile

我正在为我的包编写自己的“configure”脚本。 Makefile使用在某些版本中添加到GNU make的一些功能(例如:“call”函数)。我想检查安装的`make'实用程序是否是GNU的,如果它支持这些功能,但我不知道如何操作。

由于`configure'脚本应该是可移植的(我想避免使用Autoconf,SCons ......以及任何其他脚本,虽然这不是问题)我需要一个可移植的解决方案。我查看了我的GNU make的文档,但没有找到任何有用的东西。

提前致谢(当然,如果这个问题无关紧要,或者您认为检查'make'工具的存在和可用性不是配置工作的一部分,那就很抱歉。)

PS:我刚刚找到`make -p'选项,第一行为我打印#GNU Make 3.81 ,但是,另一次,我不知道这是否是另一个GNU扩展或者如果它是“标准的”。

2 个答案:

答案 0 :(得分:1)

make --version是GNU工具的“本地标准”。如果您不打算支持其他make,那么它就足以满足您的目的,假设:

  1. 您知道添加了您使用的功能的GNU的版本号,
  2. make的其他一些实现不会以有害的方式解释--version,也不会将自己描述为GNU Make 9.99

答案 1 :(得分:1)

我会跑make --version

如果它是GNU make,它将类似于:

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.

所以第一行包含版本版本并表明它是GNU make。如果第一行包含其他内容,包括可能不支持版本选项的错误消息,则不是。

您还可以从配置脚本中发出临时Makefile,其中包含您需要的那些命令。如果您找到的make可以无误地运行它,即I.e。退出代码0,你很好。无需确定确切的版本。检查功能符合“真正的”autoconf的精神,可能比检查版本号并使用他们支持的内容和不支持的内容知识更可靠。

最后,考虑一下“真正的”configure / autoconf工具,看看他们是如何做到的 - 甚至用它来代替你自己的工具。