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

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

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

有帮助吗?

解决方案

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

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

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

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

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

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

因此,如果您决定返回使用-qtempic设置,您的代码将构建并链接。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top