2010-02-16 2 views
3

Предположим, я хочу написать свой собственный препроцессор.Препроцессор llvm g ++ проходит

Так что я хочу что-то вроде этого:

все * .cpp и * .hpp (даже те, включенные), прежде чем они идут в г ++, они идут:

file --> my preprocessor -> g++ 

Есть ли простой способ сделать это в рамках LLVM? то есть добавить этап, который гласит: «после загрузки исходного файла, пропустите его через эту программу перед ее компиляцией»?

Спасибо!

+0

Вы используете llvm-gcc или clang? Кроме того, вы имеете в виду, что хотите каким-то образом препроцессить #include файлы до того, как компилятор их получит (т. Е. Какой-то крючок в директиве #include)? –

+0

Я тоже хочу использовать. Я хочу, чтобы мой слой вызывался прямо перед выполнением стандартных макросов #define. – anon

+0

/* Запрошенные теги: препроцессор cpp * / –

ответ

1

Идеи:

  1. Hack cpp. Вы можете легко (-no-integrated-cpp) сделать gcc, чтобы позвонить вашей версии cpp, которая назовет реальным cpp.
  2. Запрос gcc -E, соберите прилагаемые имена файлов, прочитайте все файлы с вашей программой, удалив строки «#include».
  3. Сделайте шаг создания препрепроцессора, который преобразует все файлы в промежуточную форму. * .cppanon -> * .cpp -> * .o; * .hppanon -> * .hpp;
  4. Отсутствие идеи подключения «#define».
  5. Создайте файловую систему FUSE, которая будет передавать отфильтрованные данные в gcc.

Вариант предпочтения: 4,3,1,2,5.

0

Да, было бы очень легко заставить драйвер Clang делать то, что вы хотите, хотя у него нет поддержки именно того, что вы хотите из коробки.

Смежные вопросы