Comment l'état de l'art dans la transformation source-à-source avec clang? J'ai suivi presque toutes les ressources sur le Web et je peux réaliser des réécritures source (Rewriter
) via un plugin clang, mais le binaire final n'est pas mis à jour (le CodeGen est l'activité principale, et il est compilé indépendamment de ce que J'ai modifié dans mon plugin, même en utilisant AddBeforeMainAction
dans le getActionType
).Transformation source-à-source avec clang (état de la technique)
J'ai vu quelques documents concernant libTooling et comment créer un programme indépendant qui utilise clang comme bibliothèque, mais mon but c'est de créer un plugin (FrontendPluginRegistry::Add<>
, quelque chose "facile" à brancher à un binaire clang non personnalisé) et réaliser des modifications de source à source (de manière transparente pour les utilisateurs, en évitant d'écraser leurs fichiers sources).
Modifier: Dans le cas où il est clair: je besoin de quelque chose comme un « plug-in » d'étendre tintement d'une manière facile. J'ai besoin de quelque chose qui est "intégré" dans le processus de compilation. Pourquoi? parce que j'ai besoin de modifier le code source pendant la phase de compilation, injecter du nouveau code, modifier le code source de l'utilisateur en une seule étape (je ne veux pas créer un outil pour analyser le code source de l'utilisateur) . Aussi, je voudrais distribuer mon code (plugin) pour permettre aux utilisateurs de l'utiliser par eux-mêmes.
Il est obligatoire que ce soit pendant la phase de compilation de clang (clang $FLAGS $PLUGIN $ETC -o program source_files...
).
Final binaire de quoi? Bruit? Le programme en cours de modification? Pourquoi est-ce un problème? –
Je modifie la question. J'espère que vous comprenez maintenant ce dont j'ai besoin. – user3819881
Je vois. Vous voulez un plugin d'exécution à Clang pour implémenter les transformations source-à-source lors de la compilation. OK, je comprends. Je m'attendrais à ce que cela soit très difficile à faire, puisque la machine de transformation Clang fait largement appel à des méthodes compilées dans les classes Clang, et sûrement "vous" voudrez écrire un type de code source pour réaliser les transformations interprétées lors de l'exécution . Qui sera intermédiaire entre le texte source que vous écrivez et le code Clang compilé? Le "obligatoire lors de la compilation" semble être un problème XY ... pourquoi insistez-vous là-dessus? –