Makefile教程 7-10
Makefile教程7:变量
这一章节的内容,基本在makefile教程:变量部分都介绍过了。
Makefile教程8:变量,条件判断
环境变量
这个本意很简单,就是可以读取操作系统的环境变量,比如:
.PHONY:
debug:
env=1;export env;echo $(env)
;
的这个用法见makefile之命令之间的关联
这里就是定义了一个变量env
,并且将其设置为环境变量:export env
,这部分属于操作系统的知识,和makefile无关。
之后就是在makefile中读取:echo $(env)
读取操作系统中定义的环境变量。
在编译的过程中,可以使用参数-e
来指定环境变量,比如还是上面的makefile,在运行时:
make -e env=2 debug
就是可以覆盖掉系统中的环境变量。
目标变量
这个玩意本意很简单,先回顾一下makefile中命令的基本格式:makefile基础
target ... : prerequisites ...
command
其中,如果我们想定义一些变量,仅仅在这个target
中生效,就可以采用这个,比如下面的例子,注意看其中的注释:
.PHONY:
# 这个变量仅仅在 debug 中生效
debug: cmd = pwd
# 这个变量仅仅在 debug2 中生效
debug2: cmd = whoami
debug:
$(cmd)
debug2:
$(cmd)
所以运行make debug
的时候,真正执行的是pwd
,运行make debug2
的时候,真正执行的是whoami
。
模式变量
这个也很简单,就是如果有一些变量我们想放在多个目标变量里,就可以使用这个,比如:
.PHONY:
# 模式变量,顾名思义,它自己本身就是目标变量中的变量
de%: cmd = whoami
debug:
$(cmd)
debug2:
$(cmd)
其中debug
和debug2
都可以使用这个变量。
条件判断
这个很简单,就是在makefile中增加条件判断,比如下面这个例子:
example = hello
# 注意,ifeq 后面一定要空一格,否则会报错
ifeq ($(example),hello)
output=world
else
output