Makefile -- 项目编译配置文件,由make程序解释执行

文件名 -- GNUmakefile, makefile, Makefile (GNUmakefile为GNU的make程序解释, 习惯使用Makefile 比较醒目, 但makefile的支持据说更好, 可以用make -f filenamemake -file filename指定执行文件)

注释 -- //, #

命令 -- [tab]command (以tab键开头)

引用 -- include filename (可以接多个文件以空格隔开, 也可以用make -I make --include-dir指定引用目录)

通配符 -- *, ?, [...]

文件搜寻 -- 当前目录, VPATH变量指定目录 (VPATH多个值用:隔开)

目标 -- 目标 : 依赖 (多个依赖用空格隔开, make默认执行文件中第一个目标, 然后根据依赖关系依次执行)

伪目标 -- 没有相应的文件, 只有手动执行make 伪目标, 否则不会被执行 (可以用.PHONY : 伪目标 指定此时就算有相应的文件也会被当成伪目标)

命令回显 -- 默认make会回显命令本身, 可以用@command阻止本条命令的回显或使用make -smake -slient阻止全部命令的回显

命令出错 -- 默认命令出错会终止解释执行, 可以使用-command忽略本条错误或使用make -imake --ignore-errors忽略全部, 如果文件中存在.IGNORE目标该目标中的命令错误会默认忽略, 使用make -kmake --keep-going会中断出错的目标继续执行其他目标

嵌套执行 -- cd subdir && $(MAKE)$(MAKE) -C subdir

变量传递 -- export variable传递该变量 (如果export没有跟变量就会传递所有变量, 不想传递某个变量可以用unexport,无论是否指定变量的传递规则SHELL和MAKEFLAGS都会被传递)

命令包 -- 以define开始,endef结束 (如:

define name

...

endef

可以用$(name)引用)

变量定义 -- name = ...或name := ... (使用$(name)引用,变量中含有其它变量会被展开,追加可以使用name += ...也可以使用进行override name重载,重载中可以使用定义追加等操作)

替换 -- name :a=b (把name中的a结尾都替换成b结尾)

条件判断 -- ifeq, else, endif

函数调用 -- $(function-name arguments)${function-name arguments} (参数之间用,隔开)

退出码 -- 0-成功, 1-错误, 2-如果使用了make -q参数并使得一些目标不需要更新


字符串替换函数 -- $(subst from, to, text) 返回text中from替换成to的字符串

模式字符串替换函数 -- $(patsubst pattern, replacement, text) 返回text中匹配pattern的替换成replacement的字符串,相当于text:pattern=repacement

去掉开始和结束的空格函数 -- $(strip text)

查找字符函数 -- $(findstring find,in) 在in中找find找到返回find否则返回空字符串

过滤函数 -- $(filter pattern1 pattern2...,text) 返回去除不匹配任意模式后的字符串

反过滤函数 -- $(filter-out pattern1 pattern2, text) 返回去除匹配任意模式后的字符串

排序函数 -- $(sort text) 返回按单词排序后的字符串

取单词函数 -- $(word n, text) 返回text中第n个单词,从1算起

取单词穿函数 -- $(wordlist s, e, text) 返回text中第s到e单词的字符串,从1算起

单词计数函数 -- $(words text)

取首单词函数 -- $(firstword text)

取目录函数 -- $(dir name ...) 返回各name中最后一个/之前的字符串,没有找到/就返回./

取文件函数 -- $(notdir name ...) 返回各name中最后一个/之后的字符串,没有则返回全部

取后缀函数 -- $(suffix name ...) 返回各name中文件后缀字符串

取前缀函数 -- $(basename name ...) 返回各name中去除文件后缀的字符串

加后缀函数 -- $(addsuffix suffix, name ...)

加前缀函数 -- $(addprefix prefix, name ...)

连接函数 -- $(join list1,list2) 返回将list2的每个单词分别拼接到list1中对应位数的单词上字符串

foreach函数 -- $(foreach var, list, text) 每次取出一个单词赋值给var,执行text的计算, 返回所有计算后的单词串

判断函数 -- $(if condition, then-parn, else-parn) else-parn可以省略

call函数 -- $(call expression, param_1,param_2...) 返回用param_i替换expression中的$(i)

origin函数 -- $(origin variable) (返回:

没被定义过 undefined,是默认定义default, 由makefile定义file,命令行定义command line,重载的override,命令行中自动的automatic,)

error函数 -- $(error text) 产生一个错误信息

warning函数 -- $(warning text) 产生一个警告信息