Что такое файл .h.gch?

Недавно у меня был учебный проект, в котором мне нужно было создать программу с G++.

Я использовал make файл и по какой-то причине он иногда оставлял файл .h.gch позади.

Иногда это не влияло на компиляцию, но время от времени это приводило к тому, что компилятор выдавал ошибку для исправленной или не имеющей смысла проблемы.

У меня два вопроса:

1) Что такое файл .h.gch и для чего он нужен? и

2) Почему это вызвало бы такие проблемы, когда он не был очищен?

Ответ 1

Файл .gch представляет собой предварительно скомпилированный заголовок.

Если a .gch не найден, будут использоваться обычные файлы заголовков.

Однако, если ваш проект настроен на создание предварительно скомпилированных заголовков, он сделает их, если они не существуют, и использовать их в следующей сборке.

Иногда *.h.gch будет поврежден или содержать устаревшую информацию, поэтому удаление этого файла и его компиляция должны быть исправлены.

Ответ 2

Если вы хотите узнать о файле, просто введите терминал

file filename

file a.h.gch дает:

GCC precompiled header (version 013) for C

Ответ 4

a) Они представляют собой предварительно скомпилированные заголовки: http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html

b) Они содержат "кэшированную" информацию из файлов .h и должны обновляться каждый раз при изменении соответствующего файла .h. Если этого не произойдет - у вас есть неправильные зависимости, установленные в вашем проекте

Ответ 5

Другие ответы полностью точны в отношении того, что такое gch файл. Однако контекст (в данном случае, новичок, использующий g++) - это все. В этом контексте существуют два правила:

  • Никогда, никогда, не ставьте файл .h в строку компиляции g++. Только файлы .cpp. Если файл .h случайно компилируется, удалите все файлы *.gch.

  • Никогда, никогда, никогда не помещайте .cpp файл в оператор #include.

Если одно правило нарушено, в какой-то момент проблема, описанная в вопросе, будет иметь место. Если правило два сломано, в какой-то момент компоновщик будет жаловаться на многократно определенные символы.