【问题标题】:shell - portable way to get `make´ versionshell - 获取“make”版本的便携方式
【发布时间】:2013-01-13 17:00:24
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: shell makefile


    【解决方案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,你很好。无需确定确切的版本。检查功能是本着“真正的”自动配置的精神,可能比检查版本号和使用它们支持和不支持什么的隐含知识更可靠。

    最后,考虑研究一下“真正的”配置/自动配置工具,看看他们是如何做到的——或者甚至用它来代替你自己的。

    【讨论】:

    • 不错的答案。我一直在寻找,但没有找到检查 make 的 Autoconf 宏。关于您对临时 Makefile 的建议,我想这将是我的解决方案。谢谢;)
    【解决方案2】:

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

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

    【讨论】:

    • 问题是 make --version 打印出一个用户友好的字符串,带有许可证信息,版权等,所以很难获得版本号从此(当然,正如您所说,make 的其他实现不解析 --version
    • 参见 GNU 编码标准:gnu.org/prep/standards/html_node/_002d_002dversion.html——它实际上说“第一行是为了便于程序解析”。 first 行将没有版权等。你想支持其他实现吗?如果它们返回非零或不打印“GNU make...”,则拒绝它们。
    猜你喜欢
    • 2011-01-12
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多