“帮助”字符串变量替换为“configure --help”

时间:2014-11-30 22:01:03

标签: autotools autoconf m4

我有一个字符串,我想多次使用configure --help的输出。所以我尝试在configure.ac

中做这样的事情
AC_ARG_ENABLE([foobar],
              AS_HELP_STRING([--enable-foobar], [$foobar_help_str]))

但是没有进行扩展或替换,因此输出只是$foobar_help_str

2 个答案:

答案 0 :(得分:3)

将字符串定义为M4宏:

m4_define([FOOBAR_HELP_STR], [Turn on the foobar features])
AC_ARG_ENABLE([foobar], [AS_HELP_STRING([--enable-foobar], FOOBAR_HELP_STR)])

答案 1 :(得分:2)

仅供参考,如果您查看生成的configure脚本,您会看到帮助文本已预先格式化为引用的“此处文档”中的一个文本块(通过cat发送到stdout,即在脚本运行时(即当你以./configure --help运行时)没有任何形式的替换发生的机会。人们毫无疑问地认为这是一个错误,但另一方面,因为autoconf完成打印帮助文本的处理是在不知道最终脚本将如何执行的情况下完成的,因此没有任何想法可以设置哪些变量以及它们可能采用的值范围,autoconf无法知道在帮助文本的格式化中为任何变量在运行时可能具有的任何值分配多少空间 - 时间。

对于只有二进制选项的情况(即未使用/需要[=ARG]功能的情况),应该可以编写一个智能包装器宏,它将根据默认设置生成适当的帮助文本,如果该默认值本身首先被定义为M4宏,其方式与accepted answer中建议的类似。