Я пытаюсь создать предварительно скомпилированный заголовок и использовать его при компиляции файла 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 в списке.
Почему это имеет значение?
Как я могу использовать предварительно скомпилированный заголовок при создании объектного файла, когда заголовок включает стандартную библиотеку?