一 Makefile 变量赋值
Makefile 赋值有四种方式,
1. = 延迟赋值,或者称作展开赋值 变量等待 Makefile 完全展开后再确定实际的值
x = $(y) 2
y = 3
$(warning $(2)) #at here x already is 3 2
z = 4
2. := 立即赋值,在Makefile 展开到这个位置时,立即赋值
x := $(y) 2
y := 3
$(warning $(2)) #at here x still is 2
z := 4
3. ?= 如果变量已经赋值,则什么都不做,如果是第一次定义,则按照延迟赋值的方式(=)赋值
x := 1
x ?= 2 # x already , so x is 1
4. += 变量累加
x := 1
x += 2 #x is 1 2
二 shell 在Makefile 中的调用
1.在Makefile中只能在target中调用Shell脚本,其他地方是不能输出的。比如如下代码就是没有任何输出:
VAR="Hello"
echo "$VAR"
all:
正确的使用方式:
VAR := "Hello World" "Android"
all:
echo $(VAR)
在非target中调用脚本需要使用Makefile shell 函数:
$(shell rm $(VAR))
2.Makefile中所有以 $ 打头的单词都会被解释成Makefile中的变量。如果你需要调用shell中的变量(或者正则表达式中锚定句位$),
都需要加两个$ 符号($$)。
3.在Makefile中执行shell命令,一行创建一个进程来执行。这也是为什么很多Makefile中有很多行的末尾都是"\”,
以此来保证代码是一行而不是多行,这样Makefile可以在一个进程中执行,
all:
for var in $(VAR);\
do \
echo $${var};\
done
三 Makefile 函数
一、函数的调用语法
a 函数调用,很像变量的使用,也是以“$”来标识的,其语法如下:
$( )
或是
${ }
就是函数名 是函数的参数,参数间以逗号“,”分隔,
而函数名和参数之间以“空格”分隔。函数调用以“$”开头,以圆括号或花括号把函数名和参数括起。
b 自定义函数
define function-name
...
...
endef
# $(1): Directory to copy
# $(2): Location to copy it to
# The "ls -A" is to prevent "acp s/* d" from failing if s is empty.
define package_files-copy-root
if [ -d "$(strip $(1))" -a "$$(ls -A $(1))" ]; then \
mkdir -p $(2) && \
$(ACP) -rd $(strip $(1))/* $(2); \
fi
endef
github 地址:
阅读(896) | 评论(0) | 转发(0) |