Makefile 中:= ?= += =的区别

遇到的makefile:
CC      = arm-Linux-gcc
LD      = arm-linux-ld
AR      = arm-linux-ar
OBJCOPY = arm-linux-objcopy
OBJDUMP = arm-linux-objdump


INCLUDEDIR      := $(shell pwd)/include
CFLAGS          := -Wall -Os -fno-builtin-printf
CPPFLAGS        := -nostdinc -I$(INCLUDEDIR)


export  CC AR LD OBJCOPY OBJDUMP INCLUDEDIR CFLAGS CPPFLAGS


objs := start.o main.o uart.o clock.o lib/libc.a


uart.bin: $(objs)
        ${LD} -Tuart.lds -o uart.elf $^
        ${OBJCOPY} -O binary -S uart.elf $@
        ${OBJDUMP} -D uart.elf > uart.dis


.PHONY : lib/libc.a
lib/libc.a:
        cd lib; make; cd ..


%.o:%.c
        ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<


%.o:%.S
        ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<


clean:
        make  clean -C lib
        rm -f uart.bin uart.elf uart.dis *.o

问题:

1、“=” 与“:=”的区别

2、export

答案:

   1、“=”

      make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:

            x = foo
            y = $(x) bar
            x = xyz

      在上例中,y的值将会是 xyz bar ,而不是 foo bar 。

      2、“:=”

      “:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。

            x := foo
            y := $(x) bar
            x := xyz

      在上例中,y的值将会是 foo bar ,而不是 xyz bar 了。

 

2、export行是shell命令;对每一行shell命令,make将启动一个新的进程执行这行shell命令。由于新启动的子 进程的环境变量完全跟父进程不相干,因此export并不能改变父进程的环境变量,进而也不能改变父进程以后启动的子进程,或曰“弟弟进程”的环境变量

转载于:https://www.cnblogs.com/oracleloyal/p/6092526.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值