Linux ubuntu中的makefile在意外标记附近出现bash语法错误`(
我试图用make在ubuntu 12.04 64位上编译一个程序。编译时我遇到了一个错误 /bin/bash:-c:第0行:意外标记附近的语法错误`( 这是在我将Linux ubuntu中的makefile在意外标记附近出现bash语法错误`(,linux,bash,shell,sh,Linux,Bash,Shell,Sh,我试图用make在ubuntu 12.04 64位上编译一个程序。编译时我遇到了一个错误 /bin/bash:-c:第0行:意外标记附近的语法错误`( 这是在我将/bin/sh的符号链接改为/bin/bash而不是dash之后发生的。(我这样做是因为我之前也有类似的错误,环顾互联网,我发现脚本可能会调用sh/dash中不可用的bash函数。) 我还尝试将SHELL=/bin/bash放在我的makefile的顶部,但仍然没有用 任何帮助都将不胜感激 编辑 这个怎么样 SHELL:=/bin/ba
/bin/sh
的符号链接改为/bin/bash
而不是dash之后发生的。(我这样做是因为我之前也有类似的错误,环顾互联网,我发现脚本可能会调用sh/dash中不可用的bash函数。)
我还尝试将SHELL=/bin/bash
放在我的makefile的顶部,但仍然没有用
任何帮助都将不胜感激
编辑
这个怎么样
SHELL:=/bin/bash
CC:=gcc
CFLAGS:=-std=gnu99 -L/ATLAS/lib/ubuntu12.04 -lflint -lgsl -lcblas -latlas -lm -lmpfr -lmpir -lrt -Wall -fopenmp
default: GPVSignature
GPVSignature: GPVSignature.c Keygeneration.c chol_parallel.c Sampling2.c sha1.c sha2.c timing.c
clean:
rm -f GPVSignature *.o
clean:
行下的缩进(在rm
之前)是一个制表符!这很重要。我猜您在配方行上的缩进不正确(在GPVSignature:
下和clean:
下)另外,你不需要给出一个明确的配方,因为GNU make有很多自己的配方
注意:我假设这里的文件扩展名是.c
,因为这是惯例,您使用的是gcc
,而不是g++
。如果不是这种情况,您需要引入一个模式规则,告诉GNU make如何从您用于源文件的任何扩展名创建.o
文件
即使假设您的原始配方,我还是建议您使用以下更简洁的语句:
$(CC) $(CFLAGS) -o $@ $^
…也由单个制表符缩进(除非您告诉GNU make使用不同的字符,而您显然不这样做)
还有两件事
Makefile
/GNUmakefile
是简单的ASCII文本文件还是带有BOM的UTF-8文件?请执行file Makefile
并发布输出GPVSignature
的配方颜色。第一个屏幕截图是错误的,第二个是错误的除此之外,我没有什么想法。而且一定有一些你没有提到的东西。如果你能至少显示一些有问题的Makefile,这会有帮助。这个Makefile是在Windows/Mac上编辑的(行尾错误)?你的
.bashrc
或其他bash
启动文件中有什么?与你的问题无关,但是-l
标志属于LDFLAGS
而不是CFLAGS
@twalberg。我恐怕无法帮助你进行查询,因为我在linux上仍然是一个noob:p…但是makefile是在linux机器上为你的代表编辑的我已经仔细检查了你在文章中提到的关于缩进的所有内容,没有发现任何错误。我还尝试了$(CC)$(CFLAGS)-o$@$^并使用源.c文件而不是对象文件,但错误是相同的…@Salman:如果这是完整的生成文件,唯一剩余的中断源是环境。请发布env
的输出(您可以省略用户名等)或者简单地发布GNU make使用的任何不规则的w.r.t.变量。也发布用于调用make进程的确切命令行。在问题中添加了env输出。至于make进程,我只是在终端中键入make。@Salman:我怀疑即使您的帖子包含两个不同的缩进,您是否检查了缩进两个带命令的食谱。请参阅我的编辑。。。
$(CC) $(CFLAGS) -o $@ $^