读书人

根本使用-makefile

发布时间: 2013-10-02 13:10:38 作者: rapoo

基本使用-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.
























































读书人网 >编程

热点推荐