Что такое файл .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
Ответ 3
Это скомпилированный заголовок GCC.
В Википедии есть приличное объяснение, http://en.wikipedia.org/wiki/Precompiled_header
Ответ 4
a) Они представляют собой предварительно скомпилированные заголовки:
http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html
b) Они содержат "кэшированную" информацию из файлов .h и должны обновляться каждый раз при изменении соответствующего файла .h. Если этого не произойдет - у вас есть неправильные зависимости, установленные в вашем проекте
Ответ 5
Другие ответы полностью точны в отношении того, что такое gch файл. Однако контекст (в данном случае, новичок, использующий g++) - это все. В этом контексте существуют два правила:
-
Никогда, никогда, не ставьте файл .h в строку компиляции g++. Только файлы .cpp. Если файл .h случайно компилируется, удалите все файлы *.gch.
-
Никогда, никогда, никогда не помещайте .cpp файл в оператор #include.
Если одно правило нарушено, в какой-то момент проблема, описанная в вопросе, будет иметь место.
Если правило два сломано, в какой-то момент компоновщик будет жаловаться на многократно определенные символы.