如何在生成依赖项文件中包含 IBM XLC 模板 *.c 文件

How do I include IBM XLC template *.c files in the make dependency file?

本文关键字:文件 IBM 包含 XLC 模板 依赖      更新时间:2023-10-16

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

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

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

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

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

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

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

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

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

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