首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么gcc讨厌我的简单makefile?

为什么gcc讨厌我的简单makefile?
EN

Stack Overflow用户
提问于 2011-10-15 06:15:49
回答 1查看 1.4K关注 0票数 6

下面是我的makefile,这是gcc不喜欢的:

代码语言:javascript
运行
复制
blah.exe:lex.yy.o
    gcc –o blah.exe lex.yy.o
lex.yy.o:lex.yy.c
    gcc  –c lex.yy.c
lex.yy.c:blah.lex
    flex blah.lex

如果我删除了除原始blah.lex文件之外的所有文件,则在运行make时会出现以下错误:

代码语言:javascript
运行
复制
flex blah.lex
gcc  ûc lex.yy.c
gcc: ûc: No such file or directory
make: *** [lex.yy.o] Error 1

现在,如果我按照这个顺序执行下面的命令,它都可以正常工作,并且可以编译。

代码语言:javascript
运行
复制
flex blah.lex    
gcc  –c lex.yy.c
gcc –o blah.exe lex.yy.o

接下来,如果我运行make,它会说:

代码语言:javascript
运行
复制
make: `blah.exe' is up to date.

如果存在*.o和*.exe文件,则这是正常响应。但是当需要创建这些文件时,为什么'make‘不起作用呢?

注意:我已经在makefile中放置了Tabs。flex是一个根据blah.lex的内容生成lex.yy.c的工具

EN

回答 1

Stack Overflow用户

发布于 2011-10-15 06:28:00

如果直接从Makefile复制文本,则会出现以下问题:

gcc -o ...gcc -c ...行中使用的不是一个简单的破折号(ASCII45,Unicode U+002D),而是一个短划线(cp1252 0x96,Unicode U+2013)。将它们替换为简单的破折号。

要查看是否成功,请使用以下命令:

代码语言:javascript
运行
复制
cat Makefile | tr -d '\r\n\t -~' | hexdump -C

这将从Makefile中提取所有“奇怪”的字节,并将它们打印到一个十六进制转储中。理想情况下,此命令的输出应如下所示:

代码语言:javascript
运行
复制
00000000

在您的例子中,输出可能是:

代码语言:javascript
运行
复制
00000000  ef bb bf e2 80 93 e2 80  93                       |.........|
00000009

这意味着该文件是UTF-8编码的(前三个字节告诉您),其中还有另外两个UTF-8字符:两倍于e2 80 93,这是U+2013的UTF-8编码。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7774152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档