Почему здесь выводится gcc дважды: один с "gcc", а другой "(кэшированный) gcc"?Похоже, что скрипт выполняет две проверки.
Сценарий встречает два запроса на одну и ту же проверку.Он достаточно умен, чтобы запомнить результат первого, вместо того, чтобы выполнять реальную проверку во второй раз.Поскольку он делает это, он второй раз сообщает, что результат был получен из его кэша результатов вместо вычисленных de novo .Даже если он не записывает файл кэша, он имеет кэш результатов в памяти на время выполнения скрипта.
В общем случае он не может вообще подавлять дублирующиеся проверки, поскольку часто существует код, связанный спроверка для обработки результата, и это не обязательно тот же код для каждой из избыточных проверок.
Я думал, что скрипт просто проверит кеш на наличие переменных, чтобы ускорить выполнение.
Да, это именно то, что он делает.И он сообщает, что так и сделал, и результат.Он информирует вас в случае, если он использует значение, кэшированное во время предыдущего запуска, или вводится вручную в кэш, и может предупредить вас в случае манипулирования кэшем между проверками.В случае сбоя configure
это также может помочь вам лучше отследить, где произошел сбой.
Кроме того, где хранятся эти кэшированные файлы?Согласно документации 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 его нигде нет, поэтому я предполагаю, что эти кэшированные переменные хранятся в другом месте.
Мне не ясно, чего вы ожидали от этого.Если вы хотите вручную ввести значение в кэш, вам следует использовать для этой цели AC_CACHE_VALUE
или AC_CACHE_CHECK
макрос .Вы, кажется, не сделали этого, неудивительно, что вы не видели кэшированные переменные.
Кроме того, немного неясно, как вы используете опцию --config-cache
.Эта опция и ее братья и сестры применяют для каждого запуска , чтобы контролировать, используется ли постоянный кеш (как для чтения, так и для записи).Простого наличия файла кэша с любым именем недостаточно для того, чтобы ваш сценарий configure
действительно использовал его при любом запуске.
Где находятся эти файлы?
Вы уже смотрите на это.Если вы используете опцию --config-cache
или -C
в вашем скрипте configure
, тогда кеш сохраняется в config.cache
.Если вместо этого вы используете опцию --cache-file=XXX
, то кэш сохраняется в названном вами файле.
В целом, однако, имейте в виду, что (постоянное) кэширование, вероятно, не то, что вы ищете.Если вы рассматриваете это как конкретную потребность, я бы порекомендовал задать вопрос непосредственно об этой необходимости в отдельном вопросе.