我有一个字符串,我想多次使用它来输出configure --help
. 所以我尝试做这样的事情configure.ac
:
AC_ARG_ENABLE([foobar],
AS_HELP_STRING([--enable-foobar], [$foobar_help_str]))
但是没有进行扩展或替换,所以输出只是$foobar_help_str
.
将字符串定义为 M4 宏:
m4_define([FOOBAR_HELP_STR], [Turn on the foobar features])
AC_ARG_ENABLE([foobar], [AS_HELP_STRING([--enable-foobar], FOOBAR_HELP_STR)])
仅供参考,如果您查看生成的configure
脚本,您会发现帮助文本全部预先格式化为引用的“此处文档”中的一个文本块(由 发送到标准输出cat
),即任何形式的替换发生在脚本运行时(即当你运行它时./configure --help
)。毫无疑问,这是一个错误,但另一方面,由于autoconf
漂亮打印帮助文本的处理是在不知道最终脚本将如何执行的情况下完成的,因此不知道可能会设置哪些变量以及它们可能采用的值范围,autoconf
无法知道在帮助文本的格式中为任何变量在运行时可能具有的任何值分配多少空间。
对于只需要二进制选项的情况(即[=ARG]
不使用/不需要该功能的情况),那么应该可以编写一个智能包装宏,如果该默认设置本身首先定义,它将根据默认设置生成适当的帮助文本作为 M4 宏,其方式类似于接受的答案中的建议。