2014-01-11 2 views
1

есть какой-либо вариант в gcc-компиляторе, который может вызывать мою функцию непосредственно перед началом компиляции, поэтому я могу вставлять некоторый код в файлы.Файл разбора непосредственно перед компиляцией

Примечание: Макросы не могут решить мою проблему, потому что они ничего не могут обработать.

сценарий: -

@somthing1 
class classname{ 
    @somthing2 
    setsome(int val){ 
    } 
} 

в этом коде я хочу удалить эти @ нотации и хочу, чтобы ввести код. Я могу сделать это через скрипт, но если gcc-компилятор предоставит какой-то способ, это будет очень полезно для меня.

Заранее благодарен.

+0

Я полагаю, что сценарий оболочки может быть достаточно, если это простая операция синтаксического анализа. В противном случае вам понадобится этап предварительной компиляции. –

+1

Напишите программу (на любом языке, который вы хотите), который делает то, что вы хотите, вызовите его в вашей системе сборки перед вызовом компилятора? – delnan

+0

gcc предоставляет множество опций, но я не узнал об этом. скрипт может решить мою проблему. но я хочу знать, предоставит ли компилятор опцию. –

ответ

0

Что вам нужно - это gcc-плагин. После версии 4.6 gcc поддерживал использование пользовательских плагинов, которые вызывается в «среднем конце» компилятора. Вы можете каким-либо образом манипулировать источником, но вам нужно работать с промежуточным представлением GIMPLE. Вы можете добавлять утверждения, удалять утверждения, изменять типы данных, что угодно.

+0

Пожалуйста, объясните нижний предел! Я очень серьезно относился к этому ответу, и я написал плагин, который делает то, что хочет сделать OP. –

1
  • Первое решение: как насчет стадии предварительного создания файла makefile (если вы его используете)?

    CC=gcc 
    
    all: pre-build main-build 
    
    pre-build: 
        @echo PRE 
    
    main-build: target 
    
    target: $(OBJS) 
         $(CC) -o ... 
    
  • Второе решение: если вы используете что-то другое, как CMake, чтобы сгенерировать Makefile, то вы можете использовать API для CMake, чтобы сделать операции предварительной сборки и/или расширить свой Makefile.

  • Третье решение: сделайте это с помощью сценария оболочки, что-то вроде sed также поддерживает регулярное выражение, поэтому вы должны быть настроены на довольно приличный парсер.

  • Четвертое решение: использовать pythonscript, вызывается перед началом этапа компиляции. Это, вероятно, слишком много, но на самом деле этого достаточно для любой необходимости синтаксического анализа.

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