Chinaunix首页 | 论坛 | 博客
  • 博客访问: 466791
  • 博文数量: 89
  • 博客积分: 1126
  • 博客等级: 少尉
  • 技术积分: 1432
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-11 23:37
文章分类

全部博文(89)

文章存档

2016年(6)

2015年(2)

2014年(1)

2013年(3)

2012年(23)

2011年(54)

分类: LINUX

2016-06-14 15:17:48

一 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) |
给主人留下些什么吧!~~