makefile使用

makefile的使用

使用makefile的意义

当要运行一个大程序时,代码会分开成许多个文件。逐个编译十分的不方便。而makefile可以将一个工程中所有的代码一次性编译,十分方便

一个规则

makefile文件只能命名为makefile或是Makefile

可执行文件名:源文件名

​ (一定不要忘记缩进)编译命令

hello:hello.c
	gcc hello.c -o hello

若是有多个文件时,会采用

gcc 1.c 2.c 3.c 4.c -o a.out

该命令进行连编。但是该命令存在一定的弊端。当该工程中只有一个文件发生更改时,其余文件也要一起被编译,这样会无故的消耗计算机的资源。因此需单独编译修改后的文件,再将它与其余文件链接

这时makefile可以这样写

ALL:a.out#终极目标
a.out:1.o 2.o 3.o 4.o 
	gcc 1.o 2.o 3.o 4.o -o a.out
1.o:1.c
	gcc -c 1.c -o 1.o
2.o:2.c
	gcc -c 2.c -o 2.o
3.o:3.c
	gcc -c 3.c -o 3.o
4.o:4.c
	gcc -c 4.c -o 4.o

此时makefile还是比较繁琐,不智能,依旧需要调整

两个函数

src=$(wildcard * .c)

该函数的作用是找到含有makefile文件的目录下所有的含有.c的文件名并将他们存在scr这个列表中

obj= ( p a t s u b s t (patsubst %.c ,%.o, (patsubst(src))

该函数的作用是把含有.c的文件全部替换为.o并存到obj列表中

clean函数

可以用来删除一些中间产生的无意义的文件,使用时在make后加上clean的指令

此时可将文件改为如下形式

src=$(wildcard * .c)
obj=$(patsubst %.c ,%.o,$(src))
ALL:a.out#终极目标
a.out:$(obj) 
	gcc $(obj) -o a.out
1.o:1.c
	gcc -c 1.c -o 1.o
2.o:2.c
	gcc -c 2.c -o 2.o
3.o:3.c
	gcc -c 3.c -o 3.o
4.o:4.c
	gcc -c 4.c -o 4.o
clean:
	-rm -rf $(obj) a.out#将中间产生的文件删除

三个自动变量

$@ 表示规则中的目标

$< 表示规则中的第一个条件

$^ 表示规则中的全部条件

src=$(wildcard * .c)
obj=$(patsubst %.c ,%.o,$(src))
ALL:a.out#终极目标
a.out:$(obj) 
	gcc $^ -o $@
1.o:1.c
	gcc -c $< -o $@
2.o:2.c
	gcc -c $< -o $@
3.o:3.c
	gcc -c $< -o $@
4.o:4.c
	gcc -c $< -o $@
clean:
	-rm -rf $(obj) a.out#将中间产生的文件删除

模式规则

%.o : %.c

​ gcc $^ -o $@

%.o代表.o文件,%.c代表.c文件

src=$(wildcard * .c)
obj=$(patsubst %.c ,%.o,$(src))
ALL:a.out#终极目标
a.out:$(obj) 
	gcc $^ -o $@
%.o : %.c
	gcc -c $< -o $@
clean:
	-rm -rf $(obj) a.out#将中间产生的文件删除

当一个文件有多个依赖时模式规则容易产生混乱,这时需要用静态模式规则来指定给谁用模式规则

伪目标

.PHONY clean ALL

在一个工程中可能会有文件和ALL与clean重名,会导致make命令无法执行

当加入伪目标后便可正常运行

src=$(wildcard * .c)
obj=$(patsubst %.c ,%.o,$(src))
ALL:a.out#终极目标
a.out:$(obj) 
	gcc $^ -o $@
%.o : %.c
	gcc -c $< -o $@
clean:
	-rm -rf $(obj) a.out#将中间产生的文件删除
.PHONY clean ALL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值