【版权申明】转载请附上出处链接
Makefile备忘录
简洁, 个人备忘, 供各位快速查询.
1. Makefile的自动变量
2. Makefile的预定义变量
| 变量名 | 含义 |
|---|
| $(MAKE) | 当前make解释器的文件名 |
| $(MAKECMDGOALS) | make的命令行参数(即make的目标及参数) |
| $(MAKEFILE_LIST) | 当前make所需要处理的makefile文件列表 |
| $(MAKE_VERSION) | make的版本 |
| $(CURDIR) | 当前make解释器的工作目录 |
| $(.VARIABLES) | 获得所有的特殊变量(预定义变量和自定义变量) |
4. Makefile的关键字
| 变量名 | 含义 |
|---|
| .PHONY | 伪目标, 它的依赖总是会被执行 |
| override | 用于指示makefile中定义的变量不能被覆盖(变量的定义和赋值都需要使用override关键字) |
| define … endef | 用于在makefile中定义多行变量/指令/函数 |
| export | 定义临时的环境变量(用于在各个Makefile文件中传递) |
5. Makefile的特殊字符
| 变量名 | 含义 |
|---|
| $ | 转义字符 |
| % | 用于保留变量值中的指定字符(跟shell中的*很像) |
6. make的选项
| 变量名 | 含义 |
|---|
| -e | 优先使用环境变量(makefile中可以直接使用环境变量的值, 当makefile中定义了同名变量, 则环境变量将会被覆盖, 使用-e选项将优先使用环境变量) |
| % | 用于保留变量值中的指定字符(跟shell中的*很像) |
======================================================================
11. Makefile的字符串替换
语法格式:
$(var:str1=str2) 或 ${var:str1=str2}
注意事项:
不能有任何空格
举个例子:
src := main.c other.c
obj := $(src:c=o)
12. Makefile的条件判断语句
语法格式:
ifxxx (arg1,arg2)
...true...
else
...false...
endif
(arg1,arg2)的其它合法形式: 即' = " = ()
ifxxx "arg1" "arg2"
ifxxx 'arg1' 'arg2'
ifxxx "arg1" 'arg2'
ifxxx 'arg1' "arg2"
注意事项:
(arg1,arg2)之间不能有任何空格
条件判断关键字:
ifeq 是否相等 相等为true, 否则为false
ifneq 是否不相等 不相等为true, 否则为false
ifdef 是否有值 有值为true, 否则为false
ifndef 是否没有值 没有值为true, 否则为false
13. Makefile的函数定义及函数调用
函数定义:
define [name]
...[cmd]...[args: $(0) $(1)]...
endef
函数调用:
$(call [name][, args...])