Makefile学习
2015-01-14 18:02
141 查看
一、make是如何工作的
1、make在当前目录找“Makefile”或“makefile”的文件2、如果找到,接着找第一个目标,作为终极目标
3、如果不存在,或者目标后面所依赖的[.o]文件的修改时间比目标新,将执行命令生成目标
4、如果目标依赖的[.o]文件也存在,那么make将找[.o]的依赖,并按规则生成[.o]文件(有点像堆栈)
5、当然C文件和H文件是存在的,于是make会生成.o文件,然后再用.o文件生成make的终极目标,也就是可执行文件
make只管文件的依赖性,一层一层去找文件的依赖关系,直到生成第一个目标
二、Makefile的基本规则
target ... : prerequistes ...command #必须以[tab]键开始
...
...
例子:
edit :main.o display.o
cc -o edit main.o display.o
main.o : main.c play.h
cc -c main.c -I ./
display.o : display.c play.h
cc -c display.c -I ./
.PHONY:clean
clean: # 一般将clean放在最后面,因为谁也不可能将clean作为终极目标(#注释)
rm -fr main.o display.o
三、make中使用变量
obj = main.o \display.o
edit : $(obj)
cc -o edit $(obj)
于是又新的.o加入只需要修改obj(类似于宏)
PWD=$(shell pwd) 使用shell函数语句
四、make的自动推导
make看到一个.o文件,会自动识别将.c文件加在依赖之中。并自己推导命令上面的例子可写成:
edit :main.o display.o
cc -o edit main.o display.o
main.o : play.h
display.o : play.h
五、总述
1、makefile里面的五个东西:显示规则:显示说明了,如何生成一个或多个的目标文件。
隐晦规则:make的自动推导功能
变量定义:这个变量比较像C语言中的宏
文件指示:包括三个部分,一个makefile中引用另一个makefile;根据某些情况指定makefile的有效部分;定义多行命令
注释:和Shell行注释一样使用#注释,需要使用#号则用“\#”
2、makefile文件名,别名使用 make -f Make.file
3、引用其它Makefile
include <filename> #前面使用空格不能使用[tab]
make会寻找include中的Makefile,并放置在当前位置
4、工作方式
1)读入所有的Makefile
2)读如include包含的其他Makefile
3)初始化文件中的变量
4)推导隐晦规则,并分析所有规则
5)为所有的目标文件创建依赖关系链
6) 根据依赖关系、决定哪些文件需要重新生成
7)执行生成命令
六、书写命令
1)@echo XXX用@不会显示出命令
2)命令执行:
exec:
cd /home/hchen
pwd
exec:
cd /home/hchen ; pwd 或者 cd /home/hchen && pwd #&&前面执行成功才执行后面的
3)export 变量
将变量传递到下层的Makefile中
unexport 变量
不让变量传递到下层的Makefile
4)if语句:
ifeq(0,${MAKELEVEL})
命令
endif
5)变量替换
${var:a=b}将var中以“a”结尾的“a”,替换为“b”
foo := a.o b.o c.o
bar : = $(foo:.o=.c) 将.o文件替换为.c文件
6)多层变量:
x=y
y=z
z=u
a:= $($($(x))) = u
7) 追加变量值
obj += func.o
8) 指定目标:
all : 这个伪目标是所有目标的目标,其功能一般是编译所有目标
clean : 这个伪目标一般是删除被make所创建的文件
install:这个伪目标是安装已编译号的程序,其实就是把目标执行文件拷贝到指定的目录去
print :这个伪目标是列出所有改变过的源文件
tar :把源程序打包
check:测试makefile的流程
9) 自动化变量:
$@:表示规则中的目标集
$%:仅当目标是函数库文件中,表示规则中的目标成员名
$<:依赖目标中的第一个目标名字
$?:所有目标新的目标的集合,以空格分割
$^:新的目标依赖集合
$+:所有依赖集合
相关文章推荐
- 学习make工具的用法及makefile的写法
- makefile学习[转载]
- Makefile学习教程: 跟我一起写 Makefile
- 入门篇-学习点滴之Makefile基础
- makefile学习笔记(三)
- Makefile学习教程: 跟我一起写 Makefile
- 深入学习Make命令和Makefile(上)
- makefile 学习
- Makefile学习教程: 跟我一起写 Makefile
- OCI学习之 Makefile
- Makefile的使用学习(一)
- makefile学习(一)
- Makefile学习教程: 跟我一起写 Makefile
- Makefile学习(二)
- Makefile基础 -- Unix学习总结之二
- 开始学习makefile
- makefile学习总结(修正版)
- 深入学习Make命令和Makefile(下)
- makefile学习笔记(二)
- Makefile学习教程