makeflie_学习_0508

all clean:
        @echo "\$$@ = $@"
        @echo "MAKECMDGOALS = $(MAKECMDGOALS)"

@MAKECMDGOALS是你给这个Makefile输入的目标是什么.(如果不输入,就是空,输入什么就是什么)


root@ubuntu:/home/makefile# make

$@ = all //不输入目标,默认第一个目标就是最终目标
MAKECMDGOALS =  //不输入就为空.
root@ubuntu:/home/makefile# make all
$@ = all
MAKECMDGOALS = all
root@ubuntu:/home/makefile# make clean //输入哪个,哪个就是这个Makefile的最终目标.
$@ = clean
MAKECMDGOALS = clean
root@ubuntu:/home/makefile# make all clean //两个目标都执行.
$@ = all
MAKECMDGOALS = all clean //不管怎么样, 你给这个Makefile输入了几个目标,MAKECMDGOALS就是那个目标值.
$@ = clean

MAKECMDGOALS = all clean


///

x = foo
y = $(x) z //对于这种变量= ,Makefile只对他进行从头到尾的扫描.  第一次扫描得到 $(x) = foo后,继续扫描得到$(x)=later  --->y = later z
x = later


xx := foo
yy := $(xx) z //对于这种变量:= ,Makefile只对他进行一次扫描.  第一次扫描得到 $(xx) = foo后,就不再扫描下面有没有$(xx)
xx := later


xxx = 
xxx ?= zhang //对于这种变量?=,如果前面赋值了,就以前面的为主,如果没有赋值,就以后面的为主.
yyy ?=quan

//可以在make后面带参数  make yyy=12345 就相当在里面赋值了 , 也可以在终端 里面 export  yyy=12345,两种结果一样.

//先xxx = ()  已经赋值了,我们不希望这个值被make后面带的参数给覆盖了, 可以这样来修饰xxx   ---> (oveeride  xxx= () ) .

all:
        @echo "$(x)"
        @echo "$(y)"
        @echo "$(xx)"
        @echo "$(yy)"
        @echo "$(xxx)"
        @echo "$(yyy)"


later
later z
later
foo z
(空)
quan

/

object1 = main.c foo.c bar.c
object1 += anoter.c //对于这种+=Makefile, 就相当于a+=b -------------------> a = a + b;


object2 = main.c foo.c bar.c
object2 := $(object2) anoter.c


object3 := main.c foo.c bar.c
object3 += anoter.c

all:
        @echo $(object1)
        @echo $(object2)
        @echo $(object3)

main.c foo.c bar.c anoter.c
main.c foo.c bar.c anoter.c
main.c foo.c bar.c anoter.c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值