我建立Qt工程的方法是先用QCreator建立一個簡單的程式,設計一些UI,然後用qmake把這個pro工程檔案轉成Visual Studio的vcproj工程檔案。
這樣的vcproj檔案是沒有使用先行編譯頭的,當然可以很容易地的去Visual Studio中修改設定,這裡我建立了一個名為pch.h的檔案作為標頭檔。現在碰到的問題是,Qt使用moc來產生cpp檔案並加入編譯之中,比如你有一個mainwindow.h,然後moc會產生一個moc_mainwindow.cpp,如果這個cpp檔案不引用指定的先行編譯標頭檔,則會出現這樣的錯誤:
fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "pch.h"' to your source?
當然可以自己手動的將 #include "pch.h"加入該檔案的前面,但是這個moc_mainwindow.cpp是動態產生的,在檔案頭部有一個很大的警告:WARNING! All changes made in this file will be lost!那如何讓其自動加入pch.h呢?在網上查閱了一些英文的資料,居然沒有人寫。下面是我的方法:
我先進入命令列,然後用moc -help查看moc的協助:
Usage: moc [options] <header-file><br /> -o<file> write output to file rather than stdout<br /> -I<dir> add dir to the include path for header files<br /> -E preprocess only; do not generate meta object code<br /> -D<macro>[=<def>] define macro, with optional definition<br /> -U<macro> undefine macro<br /> -i do not generate an #include statement<br /> -p<path> path prefix for included file<br /> -f[<file>] force #include, optional file name<br /> -nw do not display warnings<br /> @<file> read additional options from file<br /> -v display version of moc
這樣我就將 "-fpch.h" 放入mainwindow.h的custom build step設定的comman line參數中。但是原先的包含的mainwindow.h會被覆蓋,這樣我再加入-fmainwindow.h,問題解決。因此最終在moc後面加入的參數是 “-fpch.h -fmainwindow.h”。