Frage

Für den XLC-Compiler, geht Templat-Code in einer * .c-Datei. Dann, wenn Ihr Programm zusammengestellt, das die Template-Funktionen verwendet, der Compiler die Vorlage definisions in der C-Datei findet und instanziiert sie.

Das Problem ist, dass diese .c-Dateien sind nicht standardmäßig enthalten, wenn ein xlC -qmakedepend tun, um die Build-Abhängigkeiten zu erzeugen. Also, wenn Sie eine dieser .c-Dateien zu ändern, werden Sie nicht automatisch alles bauen, die davon abhängt.

Hat jemand eine gute Lösung für dieses Problem gefunden?

War es hilfreich?

Lösung

Kurz gesagt, ist die Antwort mit der tempinc Dienstprogramm zur Migration aus der XLC.

Das tempinc Dienstprogramm erfordert, dass Sie Ihre Dateien mit den Template-Deklarationen in Ihrem Header (H oder .hpp) Datei und Ihre Implementierungen in einer C-Datei einzurichten (diese Erweiterung ist obligatorisch). Da der Compiler Vorlage instantiations findet, wird es ausdrücklich instantiations in einer anderen Quelldatei in Ihrem tempinc Verzeichnis setzen, Code zwingt sie erzeugt werden. Der Compiler kennt die Template-Definitionen declered in foo.h in foo.c zu finden.

Das Problem, das ich angegeben ist, dass die Abhängigkeit Bauherren wissen nicht, über diese, und damit nicht Ihre .c-Dateien in den Abhängigkeiten enthalten.

Mit der Version 6.0 IBM empfiehlt eine Verwendung die -qtemplateregistry Einstellung statt -qtempinc. Dann können Sie eine typische Vorlage festlegen aufbrauchen von einschließlich den Vorlagendefinitionen in Ihrer Header-Datei, die dann sichtbar auf die Abhängigkeit finder sein, oder sie in einer separaten Datei setzen, die Sie von Ihrer Header-Datei # include, und auch sein mit der Abhängigkeit Finder gefunden.

Wenn Sie von der Verwendung -qtempinc migrieren, können Sie bedingt # include Ihre Template-Implementierungsdatei von Ihrer Deklarationsdatei mit Code wie folgt:

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

Damit Ihr Code bauen und Link, wenn Sie jemals mit der -qtempic Einstellung entscheiden, gehen zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top