1.默认限执行小写的makefile
最基本的makefile
mytool: main.o tool1.o tool2.o
gcc main.o tool1.o tool2.o -o mytool
main.o: main.c
gcc main.c -c -Wall -g -o main.o
tool1.o:tool1.c
gcc tool1.c -c -Wall -g -o tool1.o
tool2.o:tool2.c
gcc tool2.c -c -Wall -g -o tool2.o
成功结果
清理.o文件
mytool: main.o tool1.o tool2.o
gcc main.o tool1.o tool2.o -o mytool
main.o: main.c
gcc main.c -c -Wall -g -o main.o
tool1.o:tool1.c
gcc tool1.c -c -Wall -g -o tool1.o
tool2.o:tool2.c
gcc tool2.c -c -Wall -g -o tool2.o
clearn:
rm *.o mytool -rf
makefile变量替换
OBJS=main.o tool1.o tool2.o #定义变量objs
CC=gcc #定义变量gcc
CFLAGS+=-c -Wall -g
mytool: $(OBJS)
$(CC) $(OBJS) -o mytool
main.o: main.c
$(CC) main.c $(CFLAGS) -o main.o
tool1.o:tool1.c
$(CC) tool1.c $(CFLAGS) -o tool1.o
tool2.o:tool2.c
$(CC) tool2.c $(CFLAGS) -o tool2.o
clearn:
rm *.o mytool -rf
更简洁的写法
OBJS=main.o tool1.o tool2.o #定义变量objs
CC=gcc #定义变量gcc
CFLAGS+=-c -Wall -g
#gcc把上述文件( $(OBJS) ) 给 -o 生成 上述(mytool) 的目标文件
mytool: $(OBJS)
$(CC) $^ -o $@
#这里和上面一样
main.o: main.c
$(CC) $^ $(CFLAGS) -o $@
tool1.o:tool1.c
$(CC) $^ $(CFLAGS) -o $@
tool2.o:tool2.c
$(CC) $^ $(CFLAGS) -o $@
clearn:
rm *.o mytool -rf
%是通配符,同一句话%代表同一个名字
这里是更更简洁的写法
OBJS=main.o tool1.o tool2.o #定义变量objs
CC=gcc #定义变量gcc
CFLAGS+=-c -Wall -g
#gcc把上述文件( $(OBJS) ) 给 -o 生成 上述(mytool) 的目标文件
mytool: $(OBJS)
$(CC) $^ -o $@
#要生成mytool,他依赖$(OBJS)即{main.o tool1.o tool2.o},.o依赖.c,
# %同名替换(%.o:%.c)
%.o:%.c
$(CC) $^ $(CFLAGS) -o $@
clearn:
rm *.o mytool -rf
---其他------------------------------------------------------------------------------------------
其他
OBJS=system_test.o
OBJS2=perror_test.o
CC=gcc
CFLAGS=-c -Wall -g
#可执行文件的名字
PROGECT_TEXT_1 = mytool
PROGECT_TEXT_2 = perror_test
#生成的所有可执行文件的名字
all: $(PROGECT_TEXT_1) $(PROGECT_TEXT_2)
#编译规则
$(PROGECT_TEXT_1):$(OBJS)
$(CC) $^ -o $(PROGECT_TEXT_1)
$(PROGECT_TEXT_2):$(OBJS2)
$(CC) $^ -o $(PROGECT_TEXT_2)
#编译
%.o: %.c
$(CC) $(CFLAGS) $< -o $@
clean:
$(RM) *.o $(PROGECT_TEXT_1) $(PROGECT_TEXT_2) -r
clean2:
$(RM) $(OBJS) $(OBJS2)