make
变量
- $(VAR)
- VAR=gcc
- 如果你要使用真实的“$”字符,那么你需要用“$$”来表示
- $(var:a=b) 变量值的替换
- $(VAR)+=add_var
- 多行变量
- 全局变量
- 命令行参数
- 局部(目标)变量
- 自动化变量
- $@ 表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合。
- $% 仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标是"foo.a(bar.o)",那么,"$%"就是"bar.o","$@"就是"foo.a"。如果目标不是函数库文件(Unix下是[.a],Windows下是[.lib]),那么,其值为空。
- $< 依赖目标中的第一个目标名字。如果依赖目标是以模式(即"%")定义的,那么"$<"将是符合模式的一系列的文件集。注意,其是一个一个取出来的。
- $? 所有比目标新的依赖目标的集合。以空格分隔。
- $^ 所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。
- $+ 这个变量很像"$^",也是所有依赖目标的集合。只是它不去除重复的依赖目标。
- $
*
这个变量表示目标模式中"%"及其之前的部分
命令
- @echo
- pre;suf 前后有效应的命令(环境pwd)
- 打印信息
- $(info xxxxxxxx)
- $(warning xxx)
- $(error xxxxx)
- $(error $(abx) xxxx)
- 忽略出错命令
- -command
- .IGNORE target
- make
- -i
- -k
- 如果某规则中的命令出错了,那么就终止该规则的执行,但继续执行其它规则
- 嵌套执行
- 定义命令包
- define name
<TAB>
command
<TAB>
command
- endef
- 更新文件修改信息
update_modify_time=touch -d "stat -c %y $^ | sort -n | tail -1
" $@
文件指示
- Name
- Makefile
- makefile
- make -f/--file arg
- 引入其他makefile: include
- 文件搜索
- 默认是当前目录
- VPATH 环境变量(Makefile)
- vpath
- vpath pattern directory: 为符合模式pattern的文件指定搜索目录directories
- vpath pattern: 清除符合模式pattern的文件的搜索目录
- vpath: 清除所有已被设置好了的文件搜索目录
注释
表达式
- conditional-directive
- conditional-directive
- ifeq(arg1,arg2)
- ifneq(arg1,arg2)
- ifdef var
- ifndef var
- text-if-true
- else
- test-if-false
- endif
- function
- $(FUNCTION ARGUMENTS)
- 字符串处理
- $(subst from,to,text) 字符串替换
- $(patsubst pattern,replacement,text) 模式字符串替换
- $(strip string) 去掉头尾空格
- $(findstring find,in)查找字符串
- $(filter pattern1 patter2...,text)过滤函数,符合模式的留下
- $(filter-out pattern1 patter2...,text)反过滤
- $(sort list) 排序
- $(word n,text)取单词
- $(wordlist start,end,text) 取单词串
- $(words text)单词个数统计
- $(firstword text) 首个单词
- 文件名
- $(dir names...)
- $(notdir names...)
- $(suffix names...) 取后缀
- $(basename names...)取前缀
- $(addsuffix suffix,names...)
- $(addprefix prefix,names...)
- $(join list1,list2)
- 把list2 中的单词对应地加到list1的单词后面。如果list1的单词个数要比list2的多,那么list1中的多出来的单词将保持原样。如果list2的单词个数要比list1多,那么,list2多出来的单词将被复制到list2中。
- foreach
- names := a b c d
- files := $(foreach n,$(names),$(n).o)
- $(files)的值是“a.o b.o c.o d.o”
- $(if condition, then-part)
- $(if condition,then-part,else-part)
- call
- $(origin variable)
- undefined
- default
- environment
- file
- command line
- automatic
- $(shell command...)
- $(error message)
- $(warning message)
规则
- 显式
- Simple
- target: prerequisties
<TAB>
command
- 反斜杠 \ 作为换行符
- 通配符
- "
*
": 任何字符
- "?": 单个字符
- [...]: 集合中的一个字符
- 反斜杠\转义为普通字符
- $(wildcard
*
) 展开通配符结果
- 目标
- 伪目标 .PHONY
- 多目标 $@
- 静态模式 Target=target-pattern:require-pattern
- objects = foo.o bar.o
- all: $(objects)
- $(objects): %.o: %.c
- $(CC) -c $(CFLAGS) $< -o $@
- 隐晦
tags: Tool
创建@
2011-02-13
最后修改@
2014-01-01
标签/Tags
相同类目/Categories