1
我正尝试创建预编译头文件并在编译cpp文件时使用它。我有2个下列文件:
main.cpp中:包括标准库时未使用预编译头文件
#include "foo.hpp"
int main()
{
myTemplate<int> obj;
return 0;
}
和foo.hpp:
#ifndef FOO_HPP
#define FOO_HPP
template<class T>
class myTemplate
{
};
#endif
我运行这个命令来创建一个GCH文件
g++ -std=c++11 foo.hpp
然后我制作目标文件,使用-H标志查看正在使用哪些文件
g++ -std=c++11 -H -c main.cpp
和输出
! foo.hpp.gch
main.cpp
好。正在使用gch文件。
现在我在main.cpp中
#include <iostream>
的开始,因为之前插入这条线现在,当我试图创建对象文件,使用相同的命令,我得到的文件的长列表(他们中的大多数都来自标准库当然),但他们都不是foo.hpp.gch。我在列表中看到foo.hpp。
为什么它有所作为?
如何在制作目标文件时使用预编译的标题,而标题包含标准库?
我不知道热gcc处理这个问题,但我记得MSVC后面的某个地方,我记得,预编译头通常首先放在一个文件中。这是有道理的,因为其他包含的标题可能会改变,例如宏定义会影响您的头文件并使预编译版本无效。那么你是否试图包含第一个“foo.hpp”,然后是? –
Anedar
@Anedar解决了这个问题。谢谢。我想你应该发表你的评论作为答案,以获得信贷。 – Jona