Как включить файлы шаблона * .c IBM XLC в файл зависимости?

StackOverflow https://stackoverflow.com/questions/168938

  •  05-07-2019
  •  | 
  •  

Вопрос

Для компилятора XLC шаблонный код помещается в файл * .c. Затем, когда ваша программа скомпилирована с использованием функций шаблона, компилятор находит определения шаблона в файле .c и создает их.

Проблема в том, что эти файлы .c по умолчанию не включены при выполнении xlC -qmakedepend для генерации зависимостей сборки. Поэтому, если вы измените один из этих файлов .c, вы не будете автоматически создавать все, что от него зависит.

Кто-нибудь нашел хорошее решение этой проблемы?

Это было полезно?

Решение

Короче говоря, ответ состоит в том, чтобы выполнить миграцию с помощью утилиты tempinc в XLC.

Утилита tempinc требует, чтобы вы настраивали свои файлы с объявлениями шаблонов в вашем файле заголовка (.h или .hpp) и вашими реализациями в файле .c (это расширение является обязательным). Когда компилятор находит экземпляры шаблона, он помещает явные экземпляры в другой исходный файл в вашем каталоге tempinc, заставляя генерировать для них код. Компилятор знает, как найти определения шаблонов, объявленные в foo.h в foo.c.

Проблема, которую я указал, заключается в том, что разработчики зависимостей не знают об этом и, следовательно, не могут включать ваши файлы .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