我习惯于GNU忽略变量中的额外空格,所以我对以下内容感到惊讶。
## Makefile ##
PKGS = FOO BAR
FOO_DIR = foo
BAR_DIR = bar
# ^-------- Extra space at end of line
include $(foreach pkg, $(PKGS), $($(pkg)_DIR)/comp.mk)
default:
@echo "Hello world!"
如果BAR_DIR = bar
之后有空格,则make会因此错误而失败:
'make: *** bar: Is a directory. Stop.'
我想我明白这里发生了什么 - 包含文件路径中有一个空格,所以make认为我想要包含一个目录,因此错误。如果空格被删除,并且文件foo/comp.mk
和bar/comp.mk
存在,那么make将无误地运行。
我的问题是,是否有某种方法可以防止造成这种失败的额外空间?
答案 0 :(得分:2)
您可以使用strip
来防范:
include $(foreach pkg, $(PKGS), $(strip $($(pkg)_DIR))/comp.mk)
出于类似的原因,在将参数传递给函数(包括foreach
)时,通常可以避免使用逗号后的空格。