2010-02-16 6 views
3

Supposons que je souhaite écrire mon propre préprocesseur.llvm préprocesseur g ++ passes

Je veux quelque chose comme ceci:

tous * .cpp et * .hpp (même les plus inclus), avant de se rendre à g ++, ils vont:

file --> my preprocessor -> g++ 

Est-il facile manière de le faire dans le cadre LLVM? c'est-à-dire ajouter dans une étape qui dit: "après que vous chargez le fichier source, le tuyau à travers ce programme avant de le compléter"?

Merci!

+0

Utilisez-vous llvm-gcc ou clang? En outre, voulez-vous dire que vous voulez pré-traiter les fichiers #include avant que le compilateur ne les obtienne (c'est-à-dire une sorte de hook dans la directive #include)? –

+0

Je suis prêt à utiliser soit. Je souhaite que ma couche soit appelée juste avant l'exécution des macros #define standard. – anon

+0

/* Tags demandés: préprocesseur cpp * / –

Répondre

1

Idées:

  1. Hack cpp. Vous pouvez facilement (-no-integrated-cpp) faire gcc pour appeler votre version de cpp qui appellera réel cpp.
  2. Demander gcc -E, collecter les noms de fichiers inclus, lire tous ces fichiers avec votre programme, en supprimant les lignes "#include".
  3. Effectuez l'étape de génération du préprocesseur qui convertira tous les fichiers en formulaire intermédiaire. * .cppanon -> * .cpp -> * .o; * .hppanon -> * .hpp;
  4. Abandonner l'idée d'accrocher "#define" s.
  5. Créez un système de fichiers FUSE qui présentera les données filtrées à gcc.

Variantes préférées: 4,3,1,2,5.

0

Oui, il serait très facile de faire en sorte que le pilote Clang fasse ce que vous voulez, bien qu'il ne possède pas de support pour exactement ce que vous voulez sortir de la boîte.