如何在生成依赖项文件中包含 IBM XLC 模板 *.c 文件
How do I include IBM XLC template *.c files in the make dependency file?
对于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 设置,您的代码将构建并链接。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 如何从 IBM i 文件中获取成员列表
- 如何在IBM AS/400上使用c++查询文件
- 如何在生成依赖项文件中包含 IBM XLC 模板 *.c 文件