什么是autotools中的缓存变量?

问题描述 投票:0回答:2

来自irssi的真实例子:

https://github.com/irssi/irssi/blob/master/configure.ac#L824

众所周知,autotools会从configure文件生成configure.ac脚本。反过来,configure.ac文件有AC_ARG_WITHAC_ARG_ENABLE宏的数量,后面定义可以传递给--enable-foo脚本的--with-fooconfigure选项。

在上面的示例中,libutf8proc支持通过ac_cv_lib_utf8proc_utf8proc_version选项进行控制,如果将export ac_cv_lib_utf8proc_utf8proc_version=no传递给当前的env,libutf8proc将在配置阶段被忽略。

问题是这些变量是什么?为什么不使用标准配置宏?最后一个,是否记录了这些变量的列表,或者它们都在项目中单独定义>

autotools autoconf automake build-system
2个回答
1
投票

问题是这些变量是什么?

在一般意义上,这些变量用于记忆(缓存)通过configure执行的检查的结果,因此它不需要多次执行它们。你可能还记得在configure输出中看到它的效果:每当configure依赖于缓存结果而不是实际执行测试时,它会在结果中通过将结果注释为“(缓存)”来报告它。也可以将结果缓存到文件中,以便在configure运行中重复使用。

在任何情况下,这些变量由各种标准Autoconf宏设置和使用,例如AC_CHECK_LIBS等。 Autoconf保留shell变量,其名称以ac_AC_开头供自己使用。您不应该在导出任何此类变量的环境中运行configure脚本。

Autoconf手册包含有关缓存的more information

为什么不使用标准配置宏?

您提供的特定示例是使用标准宏。有问题的变量是反映项目的configure.ac其他地方出现的测试结果的变量:

AC_CHECK_LIB([utf8proc], [utf8proc_version])

如果要检索Autoconf测试的缓存结果,则读取相应缓存变量的值是执行此操作的标准方法。变量遵循标准命名方案,以使其相对容易。然而,这是一件不寻常的事情。

最后一个,是否记录了这些变量的列表,或者它们都在项目中单独定义>

Autoconf手册记录了Autoconf本身提供和使用的那些,甚至还有an index devoted to them。个别项目也可以创建自己的项目,但当然这些将不会在Autoconf手册中讨论。


0
投票

irssi维护者决定,也许是错误的,libutf8proc不需要配置开关(因为它是程序运行的可选项,我猜)

autoconf将从此行合成cv变量名称

https://github.com/irssi/irssi/blob/c1b604ee6a810d8ac5959b4681c0f6da0f14fde3/configure.ac#L332

AC_CHECK_LIB([utf8proc],[utf8proc_version])

© www.soinside.com 2019 - 2024. All rights reserved.