我想打一个make文件我使用Flex词法分析器,我试图使文件的许多模板,但它没有工作,所以请帮助我建立一个在这里是行编译代码:如何为词法分析器创建makefile?
lex -t lexical.l > lexical.c
cc -c -o lexical.o lexical.c
cc -o lexy lexical.o -ll
我想打一个make文件我使用Flex词法分析器,我试图使文件的许多模板,但它没有工作,所以请帮助我建立一个在这里是行编译代码:如何为词法分析器创建makefile?
lex -t lexical.l > lexical.c
cc -c -o lexical.o lexical.c
cc -o lexy lexical.o -ll
的一个起点将是
LEX = lex
.l.c:
$(LEX) -t $< >[email protected]
.c.o:
$(CC) -o [email protected] -c $<
lexy: lexical.o
$(CC) -o [email protected] $^ -ll
这需要与clean
规则,依赖性跟踪等进行扩展,但我认为你应该能够得到的想法如何Makefile文件的工作。
与上面的答案相比有什么不同 – flashdisk
如果你使用的是GNU,你根本不需要makefile。内置的规则涵盖了您的用例。
让我们打印内置规则,看看make是否知道如何将'%.l'转换为'%.c'。
$ make -p | grep -A6 '\.l\.c'
make: *** No targets specified and no makefile found. Stop.
.l.c:
# Implicit rule search has not been done.
# Modification time never checked.
# File has not been updated.
# recipe to execute (built-in):
@$(RM) [email protected]
$(LEX.l) $< > [email protected]
它的确如此。以类似的方式,您可以检查GNU make是否知道如何从'%.c'创建'%.o'以及从'%.o'创建'%'可执行文件。
假设当前目录中有一个lexical.l
,并且没有makefile让我们来看看如何构建lexical
。
$ make -n lexical
rm -f lexical.c
lex -t lexical.l > lexical.c
cc -c -o lexical.o lexical.c
cc lexical.o -o lexical
rm lexical.c lexical.o
太好了。我们所有想念的是-ll
标志链接你问。我们将其添加到LDLIBS
。
$ make -n lexical LDLIBS=-ll
rm -f lexical.c
lex -t lexical.l > lexical.c
cc -c -o lexical.o lexical.c
cc lexical.o -ll -o lexical
rm lexical.c lexical.o
Voilà!因此,您的makefile文件最短可能为
LDLIBS=-ll
all: lexical
GNU make已经为此定义了必要的规则。只要把这个在名为Makefile
LDLIBS = -ll
lexy: lexical.o
lexical.o: lexical.l
文件并运行
$使
就大功告成了。
你有什么错误? – iabdalkader