2008-10-03 158 views
0

對於XLC編譯器,模板代碼放在* .c文件中。然後,當編譯使用模板函數的程序時,編譯器在.c文件中找到模板定義並實例化它們。如何在make依賴文件中包含IBM XLC模板* .c文件?

問題是,在執行xlC -qmakedepend以生成構建依賴關係時,這些.c文件並未默認包含在內。因此,如果您更改其中一個.c文件,則不會自動構建依賴於它的所有內容。

有沒有人找到這個問題的一個很好的解決方案?

+0

(刪除了我的答案 - 我誤解了JohnMcG的.c文件來自哪裏) – 2008-10-06 18:06:17

回答

1

總之,答案是使用XLC的tempinc實用程序進行遷移。

tempinc實用程序要求您使用頭文件(.h或.hpp)文件中的模板聲明和.c文件中的實現(此擴展名是強制性的)來設置文件。當編譯器發現模板實例時,它會將顯式實例放入tempinc目錄中的另一個源文件中,強制爲它們生成代碼。編譯器知道要在foo.c中的foo.h中查找模板定義。

我指定的問題是依賴項構建器不知道這一點,因此不能將.c文件包含在依賴項中。

With Version 6.0 IBM recommends using a the -qtemplateregistry setting而不是-qtempinc。然後,您可以使用一個典型的模板,在頭文件中包含模板定義,然後依賴查找器可以看到它們,或者將它們放在一個單獨的文件中,該文件包含在頭文件中#include中,也可以使用依賴查找器找到。

如果您正在使用-qtempinc遷移時,可以有條件地從代碼的聲明文件#包括模板實現文件象下面這樣:

// end of foo.h 
#ifndef __TEMPINC__   
#include "foo.c"  
#endif  

因此您的代碼將建立和鏈接,如果你決定回到使用-qtempic設置。