Makefile规则
目标: 依赖
命令以tab开头
Makefile思想:编译C其实就是编译过程中文件的依赖关系,理清依赖关系即可写出Makefile。
make会把目标当做文件看待,比如当前目录下存在clean文件,执行make clean 即无效
应该采用假目标的方式执行。.PHONY 假目标应该大写。.PHONY:clean
变量的目的:更改的时候只需要改变变量赋值即可。
自动变量
解决目标和先决条件在命令中重复出现的问题。
$@:表示目标,有多个目标是我不理解。
$^:表示的是规则中的所有先决条件。
$<:表示的是规则中的第一个先决条件。
特殊变量
MAKE和 makecmdgoals
make:当前处理Makefile的命令是什么,需采用引用的方式访问$(MAKE)
对变量的操作
:=:我认为是常量 ,变量值为右边的值,覆盖原先的。
+=:追加赋值
?=:条件赋值,变量没有定义就定义了就赋值,定义了就无效。
高级变量( 引用替换)
变量名:.c = .o :文件名后缀的替换。
采用自动生成目录的方式进行管理
目标: 依赖
命令以tab开头
Makefile思想:编译C其实就是编译过程中文件的依赖关系,理清依赖关系即可写出Makefile。
make会把目标当做文件看待,比如当前目录下存在clean文件,执行make clean 即无效
应该采用假目标的方式执行。.PHONY 假目标应该大写。.PHONY:clean
Makefile变量
目的:解决重复出现的问题,方便修改。
变量规则
不需要声明类型
变量的引用格式:$(变量名)、${变量名}变量的目的:更改的时候只需要改变变量赋值即可。
自动变量
解决目标和先决条件在命令中重复出现的问题。
$@:表示目标,有多个目标是我不理解。
$^:表示的是规则中的所有先决条件。
$<:表示的是规则中的第一个先决条件。
特殊变量
MAKE和 makecmdgoals
make:当前处理Makefile的命令是什么,需采用引用的方式访问$(MAKE)
对变量的操作
:=:我认为是常量 ,变量值为右边的值,覆盖原先的。
+=:追加赋值
?=:条件赋值,变量没有定义就定义了就赋值,定义了就无效。
高级变量( 引用替换)
变量名:.c = .o :文件名后缀的替换。
函数
函数参数不需要括号,采用引用的方式调用函数。
采用自动生成目录的方式进行管理
OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
$(if <condition>, <then-part>, <else-part>)
CURDIR:特殊变量
makefile 中 export 的变量可以在shell 脚本中使用。