Comment inclure des fichiers de modèle IBM XLC * .c dans le fichier make dependency?

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

  •  05-07-2019
  •  | 
  •  

Question

Pour le compilateur XLC, le code basé sur un modèle est placé dans un fichier * .c. Ensuite, lorsque votre programme utilisant les fonctions de modèle est compilé, le compilateur trouve les définitions de modèle dans le fichier .c et les instancie.

Le problème est que ces fichiers .c ne sont pas inclus par défaut lors de l'exécution d'un xlC -qmakedepend pour générer les dépendances de construction. Donc, si vous modifiez l'un de ces fichiers .c, vous ne construirez pas automatiquement tout ce qui en dépend.

Quelqu'un at-il trouvé une bonne solution à ce problème?

Était-ce utile?

La solution

En bref, la solution consiste à migrer à l'aide de l'utilitaire tempinc de XLC.

L'utilitaire tempinc nécessite que vous configuriez vos fichiers avec les déclarations de modèle de votre fichier d'en-tête (.h ou .hpp) et vos implémentations dans un fichier .c (cette extension est obligatoire). Lorsque le compilateur trouve les instanciations de modèles, il place les instanciations explicites dans un autre fichier source de votre répertoire tempinc, ce qui oblige à générer le code correspondant. Le compilateur sait trouver les définitions de modèle décodées dans foo.h dans foo.c.

Le problème que j'ai spécifié est que les générateurs de dépendance ne sont pas au courant et ne peuvent donc pas inclure vos fichiers .c dans les dépendances.

Avec la version 6.0, IBM recommande d'utiliser un le paramètre -qtemplateregistry plutôt que -qtempinc. Ensuite, vous pouvez utiliser un modèle typique, incluant les définitions de modèle dans votre fichier d’en-tête, qui sera ensuite visible par le chercheur de dépendances, ou en les plaçant dans un fichier séparé que vous #incluez de votre fichier d’en-tête et que vous définissez également. trouvé en utilisant le détecteur de dépendance.

Si vous migrez depuis l'utilisation de -qtempinc, vous pouvez conditionnellement # inclure votre fichier d'implémentation de modèle à partir de votre fichier de déclaration avec le code suivant:

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

Ainsi, votre code sera construit et lié si vous décidez de revenir au paramètre -qtempic.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top