Где хранятся кэшированные переменные после запуска configure? - PullRequest
0 голосов
/ 13 ноября 2018

После запуска скрипта 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", а другой "(кэшированный) 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, поэтому я предполагаю, что эти кэшированные переменные хранятся в другом месте.Где находятся эти файлы?

1 Ответ

0 голосов
/ 13 ноября 2018

Почему здесь выводится 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, то кэш сохраняется в названном вами файле.

В целом, однако, имейте в виду, что (постоянное) кэширование, вероятно, не то, что вы ищете.Если вы рассматриваете это как конкретную потребность, я бы порекомендовал задать вопрос непосредственно об этой необходимости в отдельном вопросе.

...