基本使用-makefile

1.变量值连接

x := foo

y := $(x) bar


all:

echo $(x)

echo $(y)


foo

foo bar


2.判断是否之前定义变量

FOO ?= bar

如果 FOO 没有被定义过,那么变量 FOO 的值就是“bar”,如果 FOO 先前被定义
过,那么这条语将什么也不做


3.空格影响

nullstring := #null
space := $(nullstring)   #space
dir := /foo/bar  #ee
all:
        echo $(space)/file
        echo $(dir)/file



/file
/foo/bar/file


4.变量值替换

foo := a.o b.o c.o

bar := $(foo:.o=.c)

bar2 := $(foo:%.o=%.c)
all:
        echo $(bar);

echo $(bar2);


a.c b.c c.c

a.c b.c c.c


5.把变量的值再变成变量的值

x = y  
y = z  
a := $($(x)) 


$(x)的值是“y”,所以$($(x))就是$(y),于是$(a)的值就是“z”。[注意:
是“x=y”,而不是“x=$(y)”]


更上一层楼:

x = variable1  
variable2 := Hello  
y = $(subst 1,2,$(x))  
z = y  
a := $($($(z)))  
  
“$($($(z)))”扩展为“$($(y))”,而其再次被扩展为“$($(subst
1,2,$(x)))”。$(x)的值是“variable1”,subst 函数把“variable1”中的所有“1”字
串替换成“2”字串,于是,“variable1”变成“variable2”,再取其值,所以,最终,
$(a)的值就是$(varia ble2)的值——“Hello”。  

[注释:$(sbust val1,val2,$(x)),将变量x的值中字符串“val1”替换成“val2”]


6.结合变量在取值

例1:

first_second = Hello  
a = first  

b = second  
all = $($a_$b)  


Hello


例2:

a := 1

a_objects := a.o b.o c.o  
1_objects := 1.o 2.o 3.o  
  
sources := $($(a)_objects:.o=.c)


7.给变量追加值

objects = main.o foo.o bar.o utils.o  
objects += another.o  


8.override 外部赋值被忽略

例1:

参数赋值忽略

.PHONY: all
override foo = x
all:
@echo "foo = $(foo)"

#make -f Makefle foo=abc
foo = x

例2:

宏定义忽略

override define foo  
bar  
endef  


9.ifeq - else - endif

例1:

libs_for_gcc = -lgnu  
normal_libs =  
  
foo: $(objects)  
ifeq ($(CC),gcc)  
$(CC) -o foo $(objects) $(libs_for_gcc)  
else  
$(CC) -o foo $(objects) $(normal_libs)  
endif  


例2:

例一:  
bar =  
foo = $(bar)  
ifdef foo  
frobozz = yes  
else  
frobozz = no  
endif  
  
例二:  
foo =  
ifdef foo  
frobozz = yes  
else  
frobozz = no  
endif  
  
例一中,“$(frobozz)”值是“yes”,例二则是“no”。  


10.










待解决:

1.获取函数

func := subst
bar := a d b g q c
foo := $(subst a,x,$(bar))
all:
        echo $(foo)

x d b g q c


func := subst
bar := a d b g q c
foo := $($(func) a,x,$(bar))
all:
        echo $(foo)

(无数据)


2.
























































你可能感兴趣的:(linux,makefile)