日期:2014-05-16  浏览次数:20635 次

shell编程中,:=和= 的区别
我编译模块,网上写的makefile如下:
ifeq ($(KERNELRELEASE),)
  KERNELDIR ?= /home/linux/linux-2.6.22.6
  PWD := $(shell pwd)
  modules:
  $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
  modules_install:
  $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
  clean:
  rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

shell的,但是我在ubuntu下,都是 PWD = $(shell pwd)
也能正常使用的,所以搞不清,
:=和= 的区别

------解决方案--------------------
摘自 Makefile 中:= ?= += =的区别 - wanqi - 博客园


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 了。