案例一:
start:
@echo "hello"
@cat hello.c
all:
@echo "test----"
makefile 默认只执行第一个标号 其他都忽略
执行其他标号方法: make 标号名
指定文件名: make -f 文件名(可以不用makefile)
案列二:
start:hello.o
gcc -o hello hello.o
hello.o:
gcc -o hello.o -c hello.c
clean:
rm -rf hello hello.o
标号后面可以加依赖 执行gcc -o hello hello.o 如果没有hello.o就会去依赖中寻找hello.o文件
定义变量:
CC=gcc
start:hello.o
$(CC) -o hello hello.o
hello.o:
$(CC) -o hello.o -c hello.c
变量一般都大写 , $(变量名) 说明使用变量
CC=gcc
SRCS=hello.c
OBJS=hello.o
EXEC=hello
start:$(OBJS)
$(CC) -o $(EXEC) $(OBJS)
@echo "-------ok------"
$(OBJS):
$(CC) -o $(OBJS) -c $(SRCS)
clean:
rm -rf hello hello.o
make的规范:
对于.o文件,变量名称OBJS
对于.c文件,变量名称SRCS
OBJS=$(SRCS:.c=.o)
onjs= hello.c .c=.o 表示 把.c替换成.o 等号两边不能有空格!!!!
.SUFFIXES:.c .o
.c和.o中间必须有空格
.SUFFIXES一定要出现在makefile文件的第一行
代表.c和.o文件是有关系的
-o $@ -c $< 代表.o文件 .c文件
.SUFFIXES:.c .o
CC=gcc
SRCS=hello.c \
test.c
OBJS=$(SRCS:.c = .o)
EXEC=hello
start:$(OBJS)
$(CC) -o $(EXEC) $(OBJS)
@echo "-------ok------"
.c.o:
$(CC) -Wall -o $@ -c $<
clean:
rm -rf $(EXEC) $(OBJS)