包含标准库

时间:2016-09-23 20:28:45

标签: c++ g++ precompiled-headers

我正在尝试创建预编译的头文件,并在编译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 为什么会有所不同?
当标题包含标准库时,如何在制作目标文件时使用预编译的标题?

1 个答案:

答案 0 :(得分:1)

根据要求,我的评论作为答案:

首先包括预编译的标头,然后是标准库。

这种行为可能是因为编译器无法知道未预编译的头(这里是标准库)是否发生了变化,例如一些影响预编译头的宏定义并使其无效。 (也许有人可以验证这一点,因为这只是猜测)