我最近有一个课程项目,我必须用G ++制作一个程序。我使用了一个makefile,由于某种原因,它偶尔会留下一个.h.gch文件。有时,这不会影响编译,但是每次都会导致编译器针对已修复或没有意义的问题发出错误。我有两个问题:
1)什么是.h.gch文件以及用于什么?和
2)为什么在没有清理时会引起这样的问题?
感谢您的帮助。
答案 0 :(得分:104)
.gch
文件是预编译的标头。
如果未找到.gch
,则将使用正常的头文件。
但是,如果您的项目设置为生成预编译的头文件,那么如果它们不存在则会生成它们并在下一个版本中使用它们。
有时*.h.gch
会被破坏或包含过时信息,因此删除该文件并再次编译它应修复它。
答案 1 :(得分:32)
如果您想了解某个文件,只需在终端上输入
即可file filename
file a.h.gch
给出:
GCC precompiled header (version 013) for C
答案 2 :(得分:20)
它是一个GCC预编译头。
维基百科有一个不错的解释,http://en.wikipedia.org/wiki/Precompiled_header
答案 3 :(得分:15)
a)他们是预编译的标题: http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html
b)它们包含来自.h文件的“缓存”信息,每次更改相应的.h文件时都应更新。如果没有发生 - 您的项目中设置了错误的依赖项
答案 4 :(得分:10)
关于gch文件是什么,其他答案是完全准确的。但是,上下文(在这种情况下,使用g ++的初学者)就是一切。在这种情况下,有两个规则:
永远不会将.h文件放在g ++编译行上。只有.cpp文件。如果偶然编译.h文件,请删除任何* .gch文件
永远不要将.cpp文件放在#include语句中。
如果规则1被破坏,则在某个时候问题中描述的问题将会发生。 如果规则2被破坏,那么链接器会在某个时候抱怨多重定义的符号。