15.2使用外部软件

一些软件包需要或可以选择使用其他软件包已安装的。用户可以提供配置命令行选项指定要使用的外部软件。选项具有以下形式之一:

--带有-包裹[=参数]--没有-包裹

例如,--带-gnu-ld意味着使用GNU链接器而不是其他链接器。--带-x意味着与The X合作窗口系统。

用户可以通过在包名称后面跟随='和参数。给出“'用于默认使用的包;它说要使用包裹。两者都不是的论点“无”'可能包括另一个包的名称或版本号,以指定更准确地说,这个程序应该运行哪个包带有。如果未给定参数,则默认为“’.--没有-包裹等于--带有-包裹=否.

通常情况下配置脚本投诉--带有-包裹他们不支持的选项。请参见控制检查配置选项,了解详细信息,以及如何覆盖默认设置。

对于可能使用的每个外部软件包,配置.ac应该打电话AC_ARG_WITH公司以检测配置用户要求使用它。默认情况下,无论是否使用每个包,哪些参数有效取决于您。

宏:AC_ARG_WITH公司 (包裹,帮助字符串,[给定的操作],[未提供的行动])

如果用户提供配置选项--带有-包裹--没有-包裹,运行shell命令给定的操作。如果没有给出任何选项,请运行shell命令未提供的行动.名称包裹表示另一个此程序应该使用的软件包。它应该包括只有字母数字字符、破折号、加号和点。

选项的参数可用于shell命令给定的操作在shell变量中带有val,这是实际上只是名为带有_包裹,其中包含任何非字母数字字符包裹已更改为'_’. 您可以使用该变量,如果你愿意的话。

请注意未提供的行动直到AC_ARG_WITH公司已扩展。如果您需要带有_包裹通过时间参数设置为默认值解析完成,请使用m4发送文本默认值分流(参见m4发送文本)(如果作为AC_ARG_WITH公司,还提供非转移文本以避免出现shell语法错误)。

争论帮助存储是对选项的描述看起来像这样:

--with-readline支持高级命令行编辑

帮助存储如果更多细节是需要。只需确保列在“配置--帮助’. 避免在帮助字符串中使用制表符正确的前导空格是格式化帮助存储使用宏AS_帮助_字符串(请参见使帮助字符串看起来漂亮).

以下示例显示了如何使用AC_ARG_WITH公司中的宏常见的情况。您想让用户决定是否启用支持外部库(例如readline库);如果用户均未指定--带读出线也不是--没有读线,仅当库可用时,才希望启用对readline的支持在系统上。

AC_ARG_WITH([readline],[AS_HELP_STRING([--带读行],[支持花式命令行编辑@<:@default=check@:>@]),[],[:m4_divert_text([DEFAULTS],[with_readline=检查])]图书馆线=AS_IF([测试“x$with_readline”!=xno],[AC_CHECK_LIB([读线]、[主],[AC_SUBST([LIBREADLINE],[“-lreadline-lncurces”])AC_DEFINE([HAVE_LIBREADLINE],[1],[如果您有libreadline,请定义])],[如果测试“x$with_readline”!=xcheck;那么AC_MSG_故障([--with-readline已给定,但readline测试失败])fi(菲涅耳)],-插入)])

下一个示例显示如何使用AC_ARG_WITH公司为用户提供可以启用对readline库的支持,以防它仍然存在实验性和未经良好测试,因此默认禁用。

AC_ARG_WITH([readline],[AS_HELP_STRING([--带读行],[为readline启用实验支持]),[],[with_readline=否])图书馆线=AS_IF([测试“x$with_readline”!=xno],[AC_CHECK_LIB([readline],[main],[AC_SUBST([LIBREADLINE],[“-lreadline-lncurces”])AC_DEFINE([HAVE_LIBREADLINE],[1],[如果您有libreadline,请定义])],[AC_MSG_失败([--with-readline已给定,但readline测试失败]),[-注释])

最后一个示例显示了如何使用AC_ARG_WITH公司为用户提供可以禁用对readline库的支持,前提是这是一个重要的功能,默认情况下应该启用它。

AC_ARG_WITH([readline],[AS_HELP_STRING([--不带读行],[禁用对readline的支持])],[],[with_readline=是])图书馆线=AS_IF([测试“x$with_readline”!=xno],[AC_CHECK_LIB([readline],[main],[AC_SUBST([LIBREADLINE],[“-lreadline-lncurses”])AC_DEFINE([HAVE_LIBREADLINE],[1],[如果您有libreadline,请定义])],[AC_MSG_故障([读取线测试失败(--没有禁用读取线)]),[-注释])

这三个示例可以很容易地适应以下情况AC_ARG_启用应优先于AC_ARG_WITH公司(请参见选择程序包选项).