0

对于 XLC 编译器,模板化代码位于 *.c 文件中。然后,当编译使用模板函数的程序时,编译器会在 .c 文件中找到模板定义并实例化它们。

问题是在执行 xlC -qmakedepend 生成构建依赖项时,默认情况下不包含这些 .c 文件。因此,如果您更改其中一个 .c 文件,您将不会自动构建依赖它的所有内容。

有没有人找到解决这个问题的好方法?

4

1 回答 1

1

简而言之,答案是使用 XLC 的 tempinc 实用程序进行迁移。

tempinc 实用程序要求您使用头文件(.h 或 .hpp)中的模板声明和 .c 文件中的实现来设置文件(此扩展名是强制性的)。当编译器找到模板实例化时,它将显式实例化放在您的 tempinc 目录中的另一个源文件中,强制为它们生成代码。编译器知道在 foo.c 中找到在 foo.h 中声明的模板定义。

我指定的问题是依赖项构建器不知道这一点,因此无法将您的 .c 文件包含在依赖项中。

对于版本 6.0 ,IBM 建议使用 -qtemplateregistry 设置而不是 -qtempinc。然后,您可以使用一个典型的模板设置,将模板定义包含在您的头文件中,然后依赖项查找器可以看到该模板定义,或者将它们放在您从头文件中#include 的单独文件中,并且也将是使用依赖查找器找到。

如果您从使用 -qtempinc 进行迁移,则可以有条件地从声明文件中 #include 模板实现文件,代码如下:

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

因此,如果您决定重新使用 -qtempic 设置,您的代码将构建和链接。

于 2008-10-06T17:42:12.753 回答