【问题标题】:How do I include IBM XLC template *.c files in the make dependency file?如何在 make 依赖文件中包含 IBM XLC 模板 *.c 文件?
【发布时间】:2010-09-15 04:46:32
【问题描述】:

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

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

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

【问题讨论】:

  • (删除了我的答案 - 我误解了 JohnMcG 的 .c 文件的来源)

标签: c++ makefile xlc


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 2016-12-02
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    相关资源
    最近更新 更多