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