Mat*_*t G 6 c gcc makefile flex-lexer
我有以下gcc不喜欢的makefile:
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
Run Code Online (Sandbox Code Playgroud)
如果我删除除原始blah.lex文件之外的所有内容,那么当我运行make时出现此错误:
flex blah.lex
gcc ûc lex.yy.c
gcc: ûc: No such file or directory
make: *** [lex.yy.o] Error 1
Run Code Online (Sandbox Code Playgroud)
现在,如果按此顺序执行以下命令,则所有操作都可以正常运行并进行编译.
flex blah.lex
gcc –c lex.yy.c
gcc –o blah.exe lex.yy.o
Run Code Online (Sandbox Code Playgroud)
在此之后,如果我运行make,它会说:
make: `blah.exe' is up to date.
Run Code Online (Sandbox Code Playgroud)
如果存在*.o和*.exe文件,则这是正常响应.但是,当需要创建这些文件时,为什么不能"工作".
注意:我已将选项卡放在makefile中.flex是一个基于blah.lex内容生成lex.yy.c的工具
Rol*_*lig 10
如果您直接从中复制文本Makefile,这是您的问题:
而不是简单的破折号(ASCII 45,Unicode的U + 002D),你必须在一个短破折号(CP1252 0x96,Unicode的U + 2013)gcc -o ...和gcc -c ...线.用简单的破折号替换它们.
要查看是否成功,请使用以下命令:
cat Makefile | tr -d '\r\n\t -~' | hexdump -C
Run Code Online (Sandbox Code Playgroud)
这将从Makefile中提取所有"怪异"字节,并在hexdump中将它们打印到您的身上.理想情况下,此命令的输出应为:
00000000
Run Code Online (Sandbox Code Playgroud)
在您的情况下,输出可能是:
00000000 ef bb bf e2 80 93 e2 80 93 |.........|
00000009
Run Code Online (Sandbox Code Playgroud)
这意味着该文件是UTF-8编码的(前三个字节告诉你),其中还有另外两个UTF-8字符:两次e2 80 93,即U + 2013的UTF-8编码,短跑.