初学者写一个简单的makefile


什么是makefile

makefile是一个文本文件,make是一个应用工具,在linux终端的命令行可以使用make命令来运行makefile文件,进行大量的编译等功能。

举个例子:现在有多个.c文件(file_1.c、file_2.c……),需要全部编译,生成一个名为main的可执行文件,在linux命令行可以通过如下语句执行

gcc -o main *.c //将所有后缀为.c的文件联合编译为名为"main"的可执行文件

注意,当.c文件数量过多,编译时间是相当长的,如果我们更改了其中某个.c文件,理想情况下是只需编译对应那个.c文件,但是执行上述命令,是会全部进行编译的。为了解决这个问题,引入了makefile。


如何创建makefile

在linux终端的命令行直接使用vim编辑器就可以写一个makefile文件,命名为makefile或者Makefile就行。如下所示:

vi Makefile
//或者
vi makefile

make 命令在执行时默认查找的文件名是 Makefile 或者 makefile(不区分大小写)。这是约定俗成的命名规则,大多数情况下,开发者都会遵循这一规范,将构建项目的规则文件命名为 Makefile。


如何编写makefile

直接看一个简单的例子

all_o = file_1.o file_2.o
main:$(all_o)
	gcc -o main $(all_o)
	
*.o:*.c
	gcc -c $< 
	
clean:
	rm *.o

让我们逐行分析

·all_o相当于定义的一个变量,取名不定,这里取名的意思是所有(all)的.o文件。
·main:$(allo)的含义是要生成一个main文件,前提是需要变量all_o的存在,这里也可以列出所有的.o文件,因为.o文件连接后就是可执行文件,如果像例子这样用了变量代替,那么就要用$()
·执行链接的命令,即.o链接为可执行文件的具体指令。
·.o文件一开始并不是存在的,要用.c文件来编译生成。
·使用指令将每个.c文件生成对应的.o文件,$<代表自动化变量。
·clean,命令行用make clean执行clean里面的内容,例子中rm *.o就是删除所有的.o文件。

注意:
定义变量是用的“=”不是“:”
自动化变量除了用"$<",还可以用"$^"等
当文件中也有名为clean的文件时,要用".PHONY"对clean进行声明


以上都是很基础的关于makefile的知识,后续可以学cmake。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值