运行 配置后缓存的变量存储在哪里?

Where are the cached variables stored after running configure?

在我 运行 配置脚本之后,我得到了一系列输出 "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" 一次是“(cached) gcc”?该脚本似乎正在进行两项检查。我以为脚本只会检查缓存中的变量以加快执行速度。

另外,这些缓存文件存储在哪里?根据 autoconf 文档,它说:

By default, configure uses no cache file, to avoid problems caused by accidental use of stale cache files.

所以似乎可以肯定 "checks" 默认情况下会被配置脚本缓存。我已尝试 运行ning“--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

虽然在 config.cache 中找不到变量 "ac_cv_prog_gcc",所以我假设这些缓存变量存储在其他地方。这些文件位于何处?

Why is it outputting gcc twice here: one with "gcc" and the other "(cached) gcc"? It appears that the script is doing two checks.

脚本遇到两个请求进行相同的检查。它足够聪明,可以记住第一次的结果,而不是第二次执行实际检查。因为这样做,它第二次报告结果是从其结果缓存中提取的,而不是计算的 de novo。即使它没有记录缓存文件,在脚本 运行.

期间它也会在内存中缓存结果

一般来说,它不能完全禁止重复检查,因为通常有与检查相关联的代码来处理结果,并且对于每个冗余检查来说不一定是相同的代码。

I thought the script would just check the cache for variables to speed up execution.

是的,这正是它正在做的。它正在报告它已经这样做了,以及结果。如果它使用了在前一个 运行 期间缓存的值或手动输入到缓存中,它会通知您,并且如果缓存在检查之间被操纵,它会提醒您。如果 configure 失败,它还可以帮助您更好地跟踪失败发生的位置。

Also, where are these cached files stored? According to the autoconf documentation, it says:

By default, configure uses no cache file, to avoid problems caused by accidental use of stale cache files.

所以似乎可以肯定 "checks" 确实被配置脚本缓存了 默认。

默认情况下永久 不会缓存检查。但是,每个缓存的结果至少会缓存 configure 运行 期间,并且如果您启用缓存文件,则它会用于持久缓存存储。

I have tried running "--config-cache", and the file "config.cache" get created.

I also ran this in my configure script:

# 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

The variable "ac_cv_prog_gcc" is nowhere to be found in config.cache though, so I am assuming these cached variables are stored elsewhere.

我不清楚你希望通过它完成什么。如果你想手动输入一个值到缓存中,那么你应该使用 the AC_CACHE_VALUE or AC_CACHE_CHECK macro 来达到这个目的。您似乎没有这样做,您没有看到缓存的变量也就不足为奇了。

此外,您不太清楚您是如何使用 --config-cache 选项的。该选项及其兄弟选项 在每个 运行 基础上应用 来控制是否使用持久缓存(读取和写入)。仅仅存在缓存文件,无论名称如何,都不足以让您的 configure 脚本在任何给定的 运行.

上实际使用它

Where are these files located?

您已经在看它了。如果您对 configure 脚本使用 --config-cache-C 选项,那么缓存将存储在 config.cache 中。如果改为使用 --cache-file=XXX 选项,则缓存将存储在您命名的文件中。

不过,总的来说,请注意 (persistent) caching is probably not what you are looking for。如果您正在考虑满足特定需求,那么我建议您在一个单独的问题中直接询问该需求。