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
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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值