运行配置脚本后,我得到一系列输出,上面写着"cached"。例如:
checking for gcc... gcc
checking for gcc... (cached) gcc
...
checking dependency style of gcc... gcc3
checking dependency style of gcc... (cached) gcc3
为什么它在这里输出两次gcc:一次输出"gcc",另一次输出(缓存的(gcc?脚本似乎正在进行两次检查。我认为该脚本只需要检查缓存中的变量以加快执行速度。
此外,这些缓存文件存储在哪里?根据autoconf文件,它说:
默认情况下,configure不使用缓存文件,以避免意外使用过时的缓存文件引起的问题。
因此,在默认情况下,某些"检查"确实会被配置脚本缓存。我试过运行"--config-cache",然后创建了文件"config.cache"。
我还在配置脚本中运行了这个:
# optimization flags
if test "x$ac_cv_prog_gcc" = xyes; then
AC_MSG_CHECKING([AC_CV_PROG_GCC])
AC_MSG_RESULT("$ac_cv_prog_gcc")
fi
变量"ac_cv_prog_gcc"在config.cache中找不到,所以我假设这些缓存的变量存储在其他地方。这些文件在哪里?
为什么它在这里输出两次gcc:一次带有"gcc",另一次带有"(缓存的(gcc"?脚本似乎正在进行两次检查。
脚本遇到两个对同一检查的请求。记住第一次的结果,而不是第二次进行实际检查,这已经足够聪明了。因为它这样做,所以它第二次报告结果是从其结果缓存中提取的,而不是从头计算的。即使它没有记录缓存文件,在脚本运行期间,它也有一个内存中的结果缓存。
一般来说,它不能完全抑制重复检查,因为通常有与检查相关的代码来处理结果,而对于每个冗余检查,这不一定是相同的代码。
I认为脚本只会检查缓存中的变量以加快速度向上执行。
是的,这正是它正在做的。据报道,它已经这样做了,并取得了成果。如果它使用上一次运行期间缓存的值,或手动输入到缓存中,则会通知您,并且在检查之间操作缓存时,它会提醒您。如果configure
发生故障,它还可以帮助您更好地跟踪故障发生的位置。
此外,这些缓存文件存储在哪里?根据autoconf文件,它说:
默认情况下,configure不使用缓存文件,以避免意外使用过时的缓存文件引起的问题。
因此,似乎某些"检查"确实通过违约
默认情况下,不会持久缓存任何检查。但是,缓存的每个结果都至少在configure
运行期间缓存,如果启用缓存文件,则它将用于持久缓存存储。
我已经尝试运行"--config缓存"创建"config.cache"。
我还在配置脚本中运行了这个:
# optimization flags if test "x$ac_cv_prog_gcc" = xyes; then AC_MSG_CHECKING([AC_CV_PROG_GCC]) AC_MSG_RESULT("$ac_cv_prog_gcc") fi
在config.cache中找不到变量"ac_cv_prog_gcc"不过,我假设这些缓存的变量存储在其他地方。
我不清楚你希望通过这项工作取得什么成就。如果要手动在缓存中输入值,则应使用AC_CACHE_VALUE
或AC_CACHE_CHECK
宏。你似乎没有这样做,你没有看到缓存的变量也就不足为奇了。
此外,还不清楚您是如何使用--config-cache
选项的。该选项及其同级选项在每次运行的基础上应用来控制是否使用持久缓存(读和写(。仅存在任何名称的缓存文件都不足以使configure
脚本在任何给定的运行中实际使用它。
这些文件位于哪里?
您已经在查看它了。如果您对configure
脚本使用--config-cache
或-C
选项,那么缓存将存储在config.cache
中。如果使用--cache-file=XXX
选项,则缓存将存储在您命名的文件中。
但是,总的来说,请注意(持久(缓存可能不是您想要的。如果你是为了某个特定的需求而考虑的,那么我建议你在另一个问题中直接询问这个需求。