IIRC обычный шаблон Makefle
a.out: lex.yy.c main.c hash,c
<tab> gcc -o a.out main.c hash.c lex.yy.c -I. -ll
lex.yy.c: scanner.l
<tab> lex scanner.l
Это неправильно, потому что в исходном коде main.c содержит lex.yy.c
Предполагается, что исходный код изменен таким образом, что main.c включает , а не , включая lex.yy.c
Без этого изменения произойдет сбой, потому что будет два определения yylex (), одно из его #include
в main.c, а другое потому, что оно поставляется как модуль компиляции исходного кода. Я призываю людей не включать файл .c в другой файл .c.
В общем, соглашение заключается в использовании другого расширения файла (.i) для включенных исходных файлов, которые генерируют уникальные символы и код.