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

标签 autotools configure

运行配置脚本后,我得到了一系列显示“已缓存”的输出。例如:

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.

因此,某些“检查”似乎默认由配置脚本缓存。我试过运行“--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.

所以看起来某些“检查”确实被配置脚本缓存了 默认。

默认情况下,不会永久缓存检查。缓存的每个结果至少在 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 .如果您正在考虑满足特定需求,那么我建议您在一个单独的问题中直接询问该需求。

关于autotools - 运行配置后缓存的变量存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53272185/

相关文章:

linux - 在配置脚本中硬编码的 automake 版本 (am__api_version)

c - 未找到 Automake 错误 './ltmain.sh'

autotools - autoconf 未启用功能...

c++ - 将源文件列表放入 Makefile 的最佳方法

linux - 如何针对我也构建的自定义库构建 './configure && make && make install' 软件?

linux - ./configure 脚本错误地通过了 asprintf 的函数检查

c - 带有 TCC 的 GNU Autotools

ios - 在 iOS 开发的上下文中,什么是配置/makefile 脚本的好书或引用?

c - 如何在Eclipse(CDT)中设置 "./configure --without-iconv"?

c++ - 将 C++ 共享库链接到 C 程序时如何避免错误