原來如果專案使用PCH的架構,且Include次數超多的話(每個cpp幾乎include了所有的東西),加上inlucde的地方有不少#define,就會造成了超出了IntelliSense的限制。後來筆者試著把測試執行檔專案所相依的lib專案移掉,結果就正常了(雖然會造成link不過的問題),之後再花時間整理include,並將PCH機制移除,結果正常(而且也link得過)。
這個例子告訴我們降低inlucde的相依性非常重要,如果為了開發方便,可以提供類似的Common.h之類的讓執行檔專案使用,但是lib的部份應該要保持Minimal include,尤其是Head檔(甚至可以使用Interface或編譯防火牆來隔開)。
除此之外,將include切乾淨還會帶來Dependency的好處(各個函式模組及物件比較能獨立運作,方便做個別功能測試),且由於include都要自己來,可以讓自己對於函式模組與物件的運作有更深的認識。另外編譯時間也可以減少,筆者是覺得千萬不要只為了想降低編譯的時間及開發方便,就使用PCH。
相關參考連結:C++ 專案中 IntelliSense 的疑難排解
沒有留言:
張貼留言