Makefile关键字
@
makefile会把将要执行的命令行在命令执行前输出到屏幕上,使用@
可以避免显示出命令本身
若@ echo 正在编译…
则$make
显示正在编译…
若echo 正在编译…
则$make
显示:
echo 正在编译
正在编译
override
如果一个变量的值需要在编译选项中指定或由系统传入,那么makefile中可以使用override关键字来设置,使这个变量的赋值被忽略
define
使用define关键字可以定义多行变量
define two-lines
echo foo
echo $(bar)
endef
wildcard
wildcard
是makefile的关键字,作用是让通配符(Makefile中的通配符就是*, %算pattern,不是通配符)在变量或函数中展开,通常用于提取指定目录的某一类型文件。因为在Makefile的规则中,函数中的通配符是不会被展开的,网上有说法是变量的定义时也不会展开,但经过我的测试,变量的定义是可以展开的
DES:= ./*.c
all:
@echo $(DES)
./1.c ./2.c #变量可以展开
DES:=$(patsubst %.c,%.z,*.c)
all:
@echo $(DES)
*.z #通配符不能在函数中展开
DES:=$(patsubst %.c,%.z,$(wildcard ./*.c))
all:
@echo $(DES)
./1.z ./2.z #wildcard将通配符展开
export
将变量导出,以便于所有的子makefile都可以使用
include
和C语言的#include
一样,将后面的文件展开到当前位置