Domanda

Per il compilatore XLC, il codice modello va in un file * .c. Quindi, quando viene compilato il programma che utilizza le funzioni del modello, il compilatore trova le definizioni del modello nel file .c e le crea un'istanza.

Il problema è che questi file .c non sono inclusi di default quando si fa un xlC -qmakedepend per generare le dipendenze di compilazione. Quindi, se cambi uno di quei file .c, non costruirai automaticamente tutto ciò che dipende da esso.

Qualcuno ha trovato una buona soluzione a questo problema?

È stato utile?

Soluzione

In breve, la risposta è migrare via usando l'utilità tempinc dell'XLC.

L'utilità tempinc richiede di impostare i file con le dichiarazioni dei modelli nel file header (.h o .hpp) e le implementazioni in un file .c (questa estensione è obbligatoria). Man mano che il compilatore trova le istanze del modello, inserirà le istanze esplicite in un altro file sorgente nella directory tempinc, forzando la generazione del codice per esse. Il compilatore sa trovare le definizioni dei template declerate in foo.h in foo.c.

Il problema che ho specificato è che i costruttori di dipendenze non ne sono a conoscenza e quindi non possono includere i tuoi file .c nelle dipendenze.

Con la versione 6.0 IBM consiglia di utilizzare un l'impostazione -qtemplateregistry anziché -qtempinc. Quindi, è possibile utilizzare un modello tipico impostato per includere le definizioni dei modelli nel file di intestazione, che sarà quindi visibile allo strumento di ricerca delle dipendenze o inserirle in un file separato che #include dal file di intestazione e sarà inoltre trovato utilizzando il rilevatore di dipendenze.

Se si sta eseguendo la migrazione dall'uso di -qtempinc, è possibile #includere il file di implementazione del modello dal file di dichiarazione con il codice riportato di seguito:

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

Pertanto, il tuo codice verrà creato e collegato se decidi di tornare a utilizzare l'impostazione -qtempic.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top