0

我正在为我的包编写自己的“配置”脚本。Makefile 使用了某些版本中添加到 GNU make 中的一些功能(例如:“调用”功能)。我想检查安装的“make”实用程序是否是 GNU 的,以及它是否支持该功能,但我不知道如何去做。

由于“配置”脚本应该是可移植的(我想避免使用 Autoconf、SCons ......以及任何其他,尽管这不是问题)我需要一个可移植的解决方案。我浏览了我的 GNU make 的文档并没有发现任何有用的东西。

提前致谢(当然,如果这个问题无关紧要,或者如果您猜想检查“make”工具的存在性和可用性不是配置工作的一部分,我们深表歉意)。

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

4

2 回答 2

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 可以无错误地运行它,即退出代码为 0,那么您很好。无需确定确切的版本。检查功能符合“真正的”自动配置的精神,并且可能比检查版本号和使用它们支持和不支持的隐含知识更可靠。

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

于 2013-01-13T17:17:30.903 回答
1

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

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