Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix Makefile-doing";“工作太多”;_Unix_Gcc_Makefile - Fatal编程技术网

Unix Makefile-doing";“工作太多”;

Unix Makefile-doing";“工作太多”;,unix,gcc,makefile,Unix,Gcc,Makefile,在我的作业中,我们应该编译cpp2html.c来生成cpp2html.o。我们要对lex.yy.c做同样的事情。lex.yy.c由flex cppcscanner.l命令创建。最后,我们应该将.o文件链接在一起,生成一个名为cpp2html的可执行程序。 我的makefile应该使用gcc而不是g++,我相信我做得对。我已经试着让这个特定的makefile为这个程序工作了几个小时,因为用于g++部分的makefile工作得很好。当我提交这个makefile时,我被告知“当只有cpp2html.c

在我的作业中,我们应该编译cpp2html.c来生成cpp2html.o。我们要对lex.yy.c做同样的事情。lex.yy.c由flex cppcscanner.l命令创建。最后,我们应该将.o文件链接在一起,生成一个名为cpp2html的可执行程序。 我的makefile应该使用gcc而不是g++,我相信我做得对。我已经试着让这个特定的makefile为这个程序工作了几个小时,因为用于g++部分的makefile工作得很好。当我提交这个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 -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

您可以使用
gcc
-o
选项,而不是
mv
。使用
-o cpp2html
。在另一个target.shiplu中放入
flex
命令,我将整行“mv a.out cpp2html”替换为“-o cpp2html”,现在它说我的makefile甚至不构建cpp2html。将flex放在一个单独的目标中是什么意思?删除整个
mv
行,并使用这个命令`gcc-g-DDEBUG cpp2html.o lex.yy.o-o cpp2html
。对于
flex`创建一个单独的目标
lex.yy.c:cppscanner.1
使用命令
flex-cppscanner.l
。好的,我做到了。正如你所说,我完全替换了mv行,对于flex,我不完全确定你的意思(仍在学习),所以我输入了
lex.yy.c:cppscanner.l
,然后我在下面做了一个新行,点击tab,然后输入
flex cppscanner.l
。它给了我同样的“做太多的工作”错误,但我可能误解了您所说的
cpp2html.o
taget应该只有
gcc
命令,而不是flex部分。我尝试了这一点,完全按照您编写的方式输入,并且得到了“error:end of file in string”“make:***[lex.yy.c]error 1”,它说,调用makefile时不会生成“cpp2html”。lex.yy.c应该有一个空行吗?我将尝试在冒号后面没有空行的情况下运行它,但我不确定它是否是空的。我可以通过在冒号后面的第一行输入cppscanner.l,另一行使用flex cppscanner.l命令,另一行使用-o行来运行它。@JoJoBya抱歉,我很匆忙,所以犯了一些错误。我刚刚更新了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