编写自己的Makefile

时间:2013-06-04 09:39:32

标签: unix makefile

我正在尝试编写一个Makefile但它正在显示 Make: Don't know how to make cc. Stop.

我正在做的是: - 的 HELLO.C

#include<stdio.h>
extern int print();
int main(){
 print();
 return 0;
}

print.c

#include<stdio.h>
int print(){
 printf("hello\n");
 return 0;
}

生成文件

all: OUT
OUT: cc Hello.o print.o -o OUT
Hello.o: Hello.c\
         cc -c Hello.c
print.o: print.c \
         cc -c print.c
clean:  rm -f *.o
clobber: rm -f OUT

当我写作时 $&GT;使 制作:不知道如何制作cc。停止。

$&gt;干净利落 制作:不知道如何制作rm。停止。

我错过了什么......

我是这个make和makefile的新手,所以请给我一些关于这个的好教程

我改为: -

all: OUT

OUT:; @cc Hello.o print.o  -o OUT

Hello.o:; @cc -c Hello.c

print.o:; @cc -c print.c

clean:; @rm -f *.o

clobber:; @rm -f OUT

显示错误: -

cc: warning 1913: Hello.o'不存在或无法读取 cc:警告1913:print.o' does not exist or cannot be read ld: I/O error, file "Hello.o": No such file or directory Fatal error. *** Error exit code 1

1 个答案:

答案 0 :(得分:4)

规则必须与目标不同,使用硬标签缩进:

all: OUT
OUT: Hello.o print.o
        cc Hello.o print.o -o OUT
Hello.o: Hello.c
        cc -c Hello.c
print.o: print.c
        cc -c print.c
clean:  
        rm -f *.o
clobber:
        rm -f OUT

但是这可以通过依赖隐式规则来简化,并通过使用一些变量进行推广:

all: OUT
OUT: Hello.o print.o
        $(CC) $(CFLAGS) $^ -o $@
clean:
        rm -f *.o
clobber:
        rm -f OUT