使用 -qtemplateregistry 编译器选项
注: 此部分不适用于由 xlclang/xlclang + +调用的 IBM® XL C/C++ for AIX®的基于 Clang 的前端。
模板注册表使用 "先到先得" 算法:
- 当编译器首次执行隐式实例化时,它将在发生它的编译单元中进行实例化。
- 当另一个编译单元执行相同的隐式实例化时,不会将其实例化。 因此,仅为整个程序生成一个副本。
实例化信息存储在模板注册表文件中。 必须对整个程序使用相同的模板注册表文件。 两个程序不能共享模板注册表文件。
模板注册表文件的缺省文件名为 templateregistry,但您可以指定任何其他有效文件名来覆盖此缺省值。 在启动全新构建或临时构建之前清除程序构建环境时,必须删除注册表文件以及旧对象文件。
您可以使用同一模板注册表文件并行执行多个编译,但对编译时间的影响最小。
重新编译程序时,还会使用模板注册表文件中的信息来确定重新编译源文件是否可能由于缺少模板实例化而引入链接错误。 如果满足以下条件,那么编译器将在您重新编译源文件时调度一个或多个源文件的重新编译:
- 源文件实例化了其他源文件实例化的模板。
- 模板注册表选择源文件以实际实例化模板。
- 源文件不再实例化模板。
您可以使用 -qnotemplaterecompile 在链接步骤期间禁用调度的重新编译。 有关详细信息,请参阅 XL C/C++ 编译器参考中的 -qtemplaterecompile (仅限 C + +) 。