我们知道makefile中判断变量是用ifeq,这个ifeq既能判断命令行传进来的变量,又可以判断makefile内自定义的变量。
ifeq ($(platform), )
files:=$(foreach directory, $(dirs), $(wildcard $(directory)/*.config))
OBJ:=$(notdir $(files))
else
$(info no such platform of $(platform)) #需要顶格写
#####如果不为空,说明定义了编译平台,从指定的平台获取
files:= $(foreach directory, $(dirs), $(wildcard $(directory)/$(platform)*.config))
ifeq ("$(files)", " ") #如果上面匹配失败则返回一个空格的,而不是空
$(error no such files of $(files)) #需要顶格写
else
OBJ:= $(notdir $(files))
endif
endif
如上的ifeq ($(platform), )是判断platform是否为空,这个可以从命令行参数传入,如make platform=hisiv200。而ifeq ("$(files)", " ")则是判断变量files是否为空格,这样判断是因为foreach和wildcard一起使用时,匹配不到结果时,其返回的是一个空格。单独使用wildcard且匹配不到时则是返回空,则可以用ifeq ($(files), )进行判断。