我正在尝试使用Ubuntu 12.04上的一个makefile编译各种c文件。
这是代码:
myprog: main.o assembler.o print.o secondPass.o
gcc -g -ansi -Wall main.o assembler.o print.o secondPass.o -o myprog
main.o: main.c
gcc -c -ansi -Wall main.c -o main.o
assembler.o: assembler.c
gcc -c -ansi -Wall assembler.c -o assembler.o
print.o: print.c
gcc -c -ansi -Wall print.c -o print.o
secondPass.o: secondPass.c
gcc -c -ansi -Wall secondPass.c -o secondPass.o
我在这里看不到任何不属于的空格,我得到的错误如下:
make: *** [main.o] Error 1
答案 0 :(得分:2)
附录:在阅读了此主题中的其他讨论后,我相信下面的解释很可能不是原始问题的原因。
您已使用四个空格缩进命令。但是你需要用一个制表符来缩进它们;空间不起作用。 Make以这种方式敏感而臭名昭着,它让每个人都疯狂。
我尝试了你的makefile,但是用tab-indents替换了四个空格的缩进,并且它与Gnu Make 3.81一起工作。
如果无法使用编辑器修复makefile,可以尝试通过运行命令来修复makefile:
perl -i -lpe 's/^ /\t/' Makefile
告诉Perl用tab(\t
)替换四个空格的每个实例。
答案 1 :(得分:1)
您的错误似乎不在Makefile中。在那之前你应该有另一个错误。
我相信gcc -c -ansi -Wall main.c -o main.o
失败了,例如我在main.c中放了一些随机垃圾:
$ make
gcc -c -ansi -Wall main.c -o main.o
main.c:1:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ at end of input
make: *** [main.o] Error 1
答案 2 :(得分:-3)
一个简单的makefile看起来应该类似于:
CC=gcc
CFLAGS=-g -Wall
VPATH=Anagram:Permutation:Russian
all: anagram permutation russian
anagram: check_off.c count.c sort.c utility.c
$(CC) $(CFLAGS) Anagram/check_off.c Anagram/utility.c -o check_off
$(CC) $(CFLAGS) Anagram/count.c Anagram/utility.c -o count
$(CC) $(CFLAGS) Anagram/sort.c Anagram/utility.c -o sort
permutation: permutation.c randint.c
$(CC) $(CFLAGS) Permutation/permutation.c Permutation/randint.c -o permutation
russian: russian.c
$(CC) $(CFLAGS) Russian/russian.c -o russian
.PHONY: clean
clean:
rm check_off count sort permutation russian