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
clean:
rm *.o mytool -rf
//执行(gcc *.c):输出a.out文件,运行./a.out可执行main
//执行(make):
//main.c: In function ‘main’: //该警告是引文在主函数中在函数调用后没有声明
//main.c:7:2: warning: implicit declaration of function ‘mytool1’ [-Wimplicit-function-declaration]
// 7 | mytool1();
// | ^~~~~~~
//main.c:8:2: warning: implicit declaration of function ‘mytool2’ [-Wimplicit-function-declaration]
// 8 | mytool2();
// | ^~~~~~~
//正确输出:
gcc main.c -c -Wall -g -o main.o
gcc tool1.c -c -Wall -g -o tool1.o
gcc tool2.c -c -Wall -g -o tool2.o
gcc main.o tool1.o tool2.o -o mytool
//此时可运行可执行文件./mytool
//执行(make clean):删除全部*.o和mytool文件
简化改进:
OBJTS=main.o tool1.o tool2.o
CC=gcc
mytool:$(OBJTS)
$(CC) $(OBJTS) -o mytool
main.o:main.c
$(CC) main.c -c -Wall -g -o main.o
tool1.o:tool1.c
$(CC) tool1.c -c -Wall -g -o tool1.o
tool2.o:tool2.c
$(CC) tool2.c -c -Wall -g -o tool2.o
clean:
$(RM) *.o mytool -r //rm -f
OBJTS=main.o tool1.o tool2.o
CC=gcc
CFLAGS+=-c -Wall -g
mytool:$(OBJTS)
$(CC) $(OBJTS)-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
clean:
$(RM) *.o mytool -r
OBJTS=main.o tool1.o tool2.o
CC=gcc
CFLAGS+=-c -Wall -g
mytool:$(OBJTS)
$(CC) $^ -o $@ //$^上一句依赖关系中所有被依赖的文件//$@上一句中的目标文件
main.o:main.c
$(CC) $^ $(CFLAGS) -o $@
tool1.o:tool1.c
$(CC) $^ $(CFLAGS) -o $@
tool2.o:tool2.c
$(CC) $^ $(CFLAGS) -o $@
clean:
$(RM) *.o mytool -r
简化后最终程序:
OBJTS=main.o tool1.o tool2.o
CC=gcc
CFLAGS+=-c -Wall -g
mytool:$(OBJTS)
$(CC) $^ -o $@
//%.o:%.c //%为通配符,表示前后名字一致
// $(CC) $^ $(CFLAGS) -o $@
clean:
$(RM) *.o mytool -r