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》第一二章内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值