- 论坛徽章:
- 0
|
应该是前面一段比较难吧,后面一段主要是调用 set 函数了,应该比较容易些。
前面又可以分成两段,一段是使用env环境的,else之后的是第二段。
#如果定义 env=yes ,就是make的时候使用 make env=yes 这种用法
ifeq ($(env),yes)
#多行定义set开始 define表示多行定义
define set
#变量替换,展开,直接理解为 ifneq 即可
#使用 origin查询变量 $(1) 的定义方式,确定是不是环境变量,是的话就会返回 environment
#然后使用ifneq进行判断
$(eval ifneq ($$(origin $(1)),environment)
#如果在环境变量中没有定义,那么就设置 $(1)=$(2)
$(1) = $(2)
else
#如果环境存在,那么就使用 override指定,防止环境变量覆盖了Makefile中的定义
override MAKE := $(1)="$($(strip $(1)))" $(MAKE)
#与eval配对
endif)
#结束多行定义
endef
#否则,不开启环境变量情况下
else
#定义 set 变量
set = $(eval $(1) = $(2))
#整个if结束
endif
后文的 call 可以这样理解,用于进行自定义带参数变量的替换
$(call set, CROSS, ) set CROSS=
$(call set, CC, $$(CROSS)gcc) set CC=gcc
剩余的内容应该比较容易理解了 |
|