Makefile 总结

一 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 函数:
https://www.gnu.org/software/make/manual/html_node/Shell-Function.html
$(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 地址:
https://github.com/louiewh/Makefile/
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(78) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值