сгенерировать a.out из файла lex с помощью makefile

У меня есть auto.lex и я хочу сгенерировать a.out этого файла.

Я старался -

a.out: lex.yy.c
    gcc -c lex.yy.c

lex.yy.c: auto.lex
    flex -c auto.lex

но это не сработало.

ИЗМЕНИТЬ:

изменился на -

a.out: lex.yy.c 
    gcc lex.yy.c 
lex.yy.c: auto.lex 
    flex auto.lex

и исправлено.


person URL87    schedule 31.10.2012    source источник
comment
потому что -c говорит GCC только компилировать, а не компоновать...   -  person    schedule 31.10.2012
comment
@ H2CO3, не могли бы вы написать весь правильный синтаксис этого make-файла?   -  person URL87    schedule 31.10.2012
comment
В оба места, удалите -c Таким образом, это gcc lex.yy.c и flex auto.lex   -  person axiom    schedule 31.10.2012
comment
Я заменил тег Adobe Flex на gnu-flex и lex   -  person JeffryHouser    schedule 31.10.2012
comment
@amanmadaan, как я могу также удалять a.out и lex.yy.c каждый раз, когда я выполняю make ?   -  person URL87    schedule 31.10.2012
comment
@URL87 см. мой ответ. Таким образом Make автоматически удаляет промежуточные файлы.   -  person fuz    schedule 01.11.2012
comment
Или, для простоты, просто измените строку 2 следующим образом: gcc lex.yy.c;rm lex.yy.x Вы также можете написать правило в make-файле. См. справочную страницу make.   -  person axiom    schedule 01.11.2012


Ответы (1)


Рекомендуемый суффикс для файлов lex — .l. GNU make имеет встроенное правило .l.c, которое создает код C из исходного кода lex. Таким образом, если вы хотите создать исполняемый файл auto из auto.l, вам вообще не нужен make-файл. Просто введите make auto:

$ make auto
lex  -t auto.l > auto.c
cc    -c -o auto.o auto.c
cc   auto.o  -lfl -o auto
rm auto.o auto.c
person fuz    schedule 31.10.2012