【问题标题】:Makefile doing "too much work"Makefile 做“太多工作”
【发布时间】: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. For flex` 创建一个单独的目标。 lex.yy.c: cppscanner.1 使用命令 flex cppscanner.l
  • 好的,我做到了。我完全替换了 mv 行,就像你说的那样,对于 flex,我不完全确定你的意思,(仍在学习),所以我输入了 lex.yy.c: cppscanner.l 然后我在下面创建了一个新行,点击标签,然后然后输入flex cppscanner.l。它给了我同样的“做太多工作”的错误,但我可能误解了你所说的
  • cpp2html.o taget 应该只有 gcc 命令而不是 flex 部分。

标签: unix gcc makefile


【解决方案1】:

这个 makefile 应该可以解决这个问题,

cpp2html: cpp2html.o lex.yy.o
    gcc -g -DDEBUG cpp2html.o lex.yy.o -o cpp2html

cpp2html.o: cpp2html.c
    gcc -g -DDEBUG -c cpp2html.c

lex.yy.o: lex.yy.c
    gcc -g -c lex.yy.c

lex.yy.c: cppscanner.l
    flex cppscanner.l -o lex.yy.c

【讨论】:

  • 我试过这个,完全按照你写的那样输入它,然后得到“错误:字符串中的文件结尾”“make:**** [lex.yy.c]错误1”另外,它说makefile在调用时不会构建'cpp2html'。 lex.yy.c 应该有一个空行吗?我将尝试在冒号后不带空行的情况下运行它,但我不确定是否是这样。
  • 我可以通过在冒号后的第一行输入 cppscanner.l 来让它工作,另一个是命令 flex cppscanner.l,另一个是 -o 行。跨度>
  • @JoJoBya 抱歉,我很着急,所以犯了一些错误。我刚刚更新了makefile。应该这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多