Как включить файлы шаблона * .c IBM XLC в файл зависимости? - PullRequest
0 голосов
/ 04 октября 2008

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

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

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

1 Ответ

1 голос
/ 06 октября 2008

Короче говоря, ответ состоит в том, чтобы выполнить миграцию с помощью утилиты 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.

...