Makefile中变量的定义及使用

Makefile中变量的定义及使用

CC := gcc TAGRET := hello.out$(TARGET): func.o main.o $(CC) -o $(TARGET) func.O


上述Makefile中第一二行依次定义了变量CC、TARGET,第四五行引用了这两个变量,引用变量采用"$(变量名)"或者"${变量名}"的形式。
Makefile中的变量只能是字符串类型。 Makefile中变量有四种赋值方式: 1,简单赋值( := ) 编程语言中常规理解的赋值方式,只对当前语句的变量有效 2,递归赋值( = )赋值语句可能影响多个变量,所有目标变量相关的其他变量都受影响 3,条件赋值( ?= )如果变量未定义,则使用符号中的值定义变量。如果该变量已经赋值,则该赋值语句无效。 4,追加赋值( += )原变量用空格隔开的方式追加一个新值
用例子来了解一下各个赋值的差别:
简单赋值
x := foo y := $(x)b x := new.PHONY : test test: @echo "y => $(y)" @echo "x => $(x)"

输出值: x => new y => foob
递归赋值
x = foo y = $(x)b x = new.PHONY : test test: @echo "y => $(y)" @echo "x => $(x)"

输出值: y = > newb x => new
条件赋值
x := foo y := $(x)b x ?= new.PHONY : test test: @echo "y => $(y)" @echo "x => $(x)"

输出值: y => foob x = foo
追加赋值
x := foo y := $(x)b x += $(y).PHONY : test test: @echo "y => $(y)" @echo "x => $(x)"

输出结果: y => foob x => foo foob

【Makefile中变量的定义及使用】递归赋值就是一个连锁反应,只要之前与该变量直接产生过关联的变量都会有影响。
条件赋值,第一次为变量赋值的时候推荐条件赋值。






    推荐阅读