【发布时间】:2013-11-12 03:05:22
【问题描述】:
对于我的任务,我们应该编译 cpp2html.c 以生成 cpp2html.o。我们要对 lex.yy.c 做同样的事情。 lex.yy.c 由命令 flex cppscanner.l 创建。最后,我们应该将 .o 文件链接在一起以生成一个名为 cpp2html 的可执行程序。 我的 makefile 应该使用 gcc 而不是 g++,我相信我做得正确。我已经尝试让这个特定的 makefile 为这个程序工作了几个小时,因为 g++ 部分的那个工作正常。当我提交这个 makefile 时,我被告知“当只更改 cpp2html.c 时,你的 makefile 做了太多的工作”。我尝试查找此错误,但只能找到在 g++ 部分出现错误的人;我尝试调整它,但它不起作用。我试过改变makefile的格式,我试过改变代码,但我就是不知道我做错了什么。
我怎样才能改变我的makefile来做它需要做的事情,而不让它做“太多的工作”?
我的makefile如下。
cpp2html: cpp2html.o lex.yy.o
gcc -g -DDEBUG cpp2html.o lex.yy.o
mv a.out cpp2html
cpp2html.o: cpp2html.c
gcc -g -DDEBUG -c cpp2html.c
flex cppscanner.l
lex.yy.o: lex.yy.c
gcc -g -c lex.yy.c
编辑:
cpp2html: cpp2html.o lex.yy.o
gcc -g cpp2html.o lex.yy.o
gcc -g -DDEBUG cpp2html.o lex.yy.o -o cpp2html
cpp2html.o: cpp2html.c
gcc -g -c cpp2html.c
lex.yy.c: cppscanner.l
flex cppscanner.l
lex.yy.o: lex.yy.c
gcc -g -c lex.yy.c
【问题讨论】:
-
您可以使用
gcc的-o选项来代替mv。使用-o cpp2html。还将flex命令放在单独的目标中。 -
shiplu,我用“-o cpp2html”替换了整行“mv a.out cpp2html”,现在它说我的makefile甚至没有构建cpp2html。将 flex 放在单独的目标中是什么意思?
-
删除整个
mv行并使用此命令` gcc -g -DDEBUG cpp2html.o lex.yy.o -o cpp2html. Forflex` 创建一个单独的目标。lex.yy.c: cppscanner.1使用命令flex cppscanner.l。 -
好的,我做到了。我完全替换了 mv 行,就像你说的那样,对于 flex,我不完全确定你的意思,(仍在学习),所以我输入了
lex.yy.c: cppscanner.l然后我在下面创建了一个新行,点击标签,然后然后输入flex cppscanner.l。它给了我同样的“做太多工作”的错误,但我可能误解了你所说的 -
cpp2html.otaget 应该只有gcc命令而不是 flex 部分。