C++ 包含标准库时不使用预编译头

C++ 包含标准库时不使用预编译头,c++,g++,precompiled-headers,C++,G++,Precompiled Headers,我试图创建一个预编译的头文件,并在编译cpp文件时使用它。我有以下两个文件: main.cpp: #include "foo.hpp" int main() { myTemplate<int> obj; return 0; } 然后我创建对象文件,使用-H标志查看正在使用哪些文件 g++ -std=c++11 -H -c main.cpp 输出是 ! foo.hpp.gch main.cpp 好。正在使用gch文件 现在,我将这一行插入main.cpp的开

我试图创建一个预编译的头文件,并在编译cpp文件时使用它。我有以下两个文件:
main.cpp:

#include "foo.hpp"

int main()
{
    myTemplate<int> obj;

    return 0;
}
然后我创建对象文件,使用-H标志查看正在使用哪些文件

g++ -std=c++11 -H -c main.cpp
输出是

! foo.hpp.gch
 main.cpp
好。正在使用gch文件

现在,我将这一行插入main.cpp的开头

#include <iostream>
#包括
现在,当我尝试创建对象文件时,使用与前面相同的命令,我得到了一个长的文件列表(其中大多数文件当然来自标准库),但没有一个是foo.hpp.gch。我确实在列表中看到了foo.hpp。
为什么会有不同?

制作对象文件时,如果标题包含标准库,如何使用预编译的标题?

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

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

这种行为可能是因为编译器无法知道未预编译头(此处为标准库)是否更改,例如某些宏定义会影响预编译头并使其无效。 (也许有人能证实这一点,因为这只是猜测)

! foo.hpp.gch
 main.cpp
#include <iostream>