Makefile学习记录(一)[a5asd6e87c4]

Makefile学习笔记

该文是阅读陈皓老师的《跟我一起写Makefile》的读书笔记,仅用于个人回顾复习。

基本操作

目标文件:依赖文件
	tab+command

超简单的有没有,秒学会,然后你就可以开始写简单的Makefile了
像是这种:

//没用任何变量和隐含规则的Makefile
hello:hello.o

gcc -o hello hello.o
 
hello.o:

gcc -o hello.o -c hello.c 

clean:
rm -rf hello.o  #delete file hello.o

进阶学习

变量定义

OBJECT = main.o hello.o whatever.o
这样增加依赖关系时就不需要修改太多东西

clean

clean 一般放在makefile的最后,常见的写法为

.PHONY:clean
clean:
    -rm -rf edit $(objects)  //写要删除的文件

据说rm前的减号可以再某些文件出现问题时,自动跳过错误,继续进行指令。

简单的隐式规则

1.自动推导命令
只要 make 看到一个 .o 文件,它就会自动的把 .c 文件加在依赖关系中,如果 make 找到一个 whatever.o ,那么 whatever.c 就会是 whatever.o 的依赖文件。并且 cc -c whatever.c 也会被推 导出来,于是,我们的 makefile 再也不用写得这么复杂。因此有

objects = main.o kbd.o command.o display.o \ 
          insert.o search.o files.o utils.o
edit : $(objects) 
	cc -o edit $(objects)
main.o : defs.h 
kbd.o : defs.h command.h 
command.o : defs.h command.h 
display.o : defs.h buffer.h 
insert.o : defs.h buffer.h 
search.o : defs.h buffer.h	
files.o : defs.h buffer.h command.h 
utils.o : defs.h
//可以看到,这里.c的依赖跟命令都可以省略了 

.PHONY : clean 
clean : 
	rm edit $(objects)

2.收拢
因为依赖文件就三个,上述代码还可以简化为

objects = main.o kbd.o command.o display.o \ 
          insert.o search.o files.o utils.o
edit : $(objects) cc -o edit $(objects)
$(objects) : defs.h kbd.o command.o files.o : command.h display.o insert.o search.o files.o : buffer.h
.PHONY : clean 
clean : 
	rm edit $(objects)

Makefile细节

按照书中的顺序,通过以上对Makefile有一个基本认识后,需要进一步了解细节。

Makefile构成

  1. 显示规则
  2. 隐晦规则:包括但不限于上述的自动推导
  3. 变量定义
  4. 文件指示:可以在一个Makefile include进别的Makefile
  5. 注释:要用#开头,跟python一样

Makefile文件名

一般采用“Makefile”,这样make可以自动寻找。
如果采用别的名称,那就得用-f或–file参数

	make -f 文件名

引用其他file

include"file name"
make会在当前目录下寻找文件

  1. 如果 make 执行时,有 -I 或 --include-dir 参数,那么 make 就会在这个参数所指定的目录下 去寻找。
  2. 如果目录 /include (一般是:/usr/local/bin 或 /usr/include )存在的话,make 也会去找。
  3. 如果定义了环境变量MAKEFILE,则相当于进行了一个include操作

make的工作方式

  1. 读入所有的 Makefile。
  2. 读入被 include 的其它 Makefile。
  3. 初始化文件中的变量。
  4. 推导隐晦规则,并分析所有规则。
  5. 为所有的目标文件创建依赖关系链。
  6. 根据依赖关系,决定哪些目标要重新生成。
  7. 执行生成命令。

参考书籍是陈皓老师的《跟我一起写Makefile》第一二章内容

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值