如何保留额外的空间来破坏这个Makefile?

时间:2013-03-13 04:18:33

标签: makefile gnu-make

我习惯于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.mkbar/comp.mk存在,那么make将无误地运行。

我的问题是,是否有某种方法可以防止造成这种失败的额外空间?

1 个答案:

答案 0 :(得分:2)

您可以使用strip来防范:

include $(foreach pkg, $(PKGS), $(strip $($(pkg)_DIR))/comp.mk)

出于类似的原因,在将参数传递给函数(包括foreach)时,通常可以避免使用逗号后的空格。