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

问题描述:

我习惯于GNU make忽略变量中多余的空格,所以我对以下内容感到惊讶。如何保留一个额外的空间来打破这个Makefile?

## 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: *** bar: Is a directory. Stop.' 

我想我明白这里发生了什么 - 有在包含文件路径的空间,所以让认为我想包括一个目录,因此错误。如果该空间被删除,并且文件foo/comp.mkbar/comp.mk存在,make将会正常运行。

我的问题是,是否有某种方法来防止引起此故障的额外空间?

+0

使变量赋值中的非空值后总是保留空白。除strip之外,另一个选项是使用一个具有体面的makefile模式的编辑器,并会警告您(或只是为您删除)多余的行尾空白。 – MadScientist 2013-03-14 13:20:40

您可以使用strip防止的是:

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

出于同样的理由,它往往是明智的,避免空格逗号之后传递参数时功能,包括foreach

+0

谢谢。我最初尝试使用“strip”,但我必须把它放在错误的地方。 – dwikle 2013-03-14 01:03:39