makefile中=,+=,:=,?=的使用

来源:互联网 发布:ktm duke1290数据 编辑:程序博客网 时间:2024/06/02 07:16

在makefile中经常使用4种赋值符号,作用又都不相同,这里记录一下分别的作用。

使用一个例子先看一下:

ifdef DEFINE_VERVER = "hello world!"elseendififeq ($(OPT),define)VER ?= "hello world!firsr!"endififeq ($(OPT),add)VER += "kelly!"endififeq ($(OPT),recover)VER := "helloworld again!!!!"endifall:@echo $(VER)

在命令行下分别执行

[(8) root@Fedora~/test_makefile]#make DEFINE_VER=true OPT=definehello world![(9) root@Fedora~/test_makefile]#make DEFINE_VER=true OPT=addhello world! kelly![(10) root@Fedora~/test_makefile]#make DEFINE_VER=true OPT=recoverhelloworld again!!!![(11) root@Fedora~/test_makefile]#make DEFINE_VER= OPT=definehello world!firsr![(12) root@Fedora~/test_makefile]#make DEFINE_VER= OPT=addkelly![(13) root@Fedora~/test_makefile]#make DEFINE_VER= OPT=recoverhelloworld again!!!!

从上面的结果中就可以看到他们的区别:
=  是最基本的赋值
:= 是覆盖之前的赋值
?= 是如果没有被赋值就赋予等号后面的值
+= 是添加等号后面的值

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 了




原创粉丝点击