如何避免额外的空格破坏此Makefile?

3

我习惯于GNU make在变量中忽略多余的空格,所以我对以下情况感到惊讶。

## 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将不会出错。

我的问题是,是否有一种方法可以防止额外的空格导致此失败?


make 命令在变量赋值后会保留非空值后面的空格。除了使用 strip 之外,另一个选择是使用具有良好 makefile 模式的编辑器,它会警告您有关多余的行尾空格(或者直接为您删除)。 - MadScientist
1个回答

2
您可以使用strip来防止这种情况发生:
include $(foreach pkg, $(PKGS), $(strip $($(pkg)_DIR))/comp.mk)

出于类似的原因,当向函数传递参数时,包括foreach时,通常最好避免在逗号后面添加空格。

谢谢。我最初尝试使用strip,但可能放错了位置。 - dwikle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接