makefile在Ubuntu上编译C源文件

时间:2014-03-22 15:56:04

标签: c makefile

我正在尝试使用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

3 个答案:

答案 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