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.mk存在bar/comp.mk,make 将运行而不会出错。

我的问题是,是否有某种方法可以防止导致此故障的额外空间?

4

1 回答 1

2

您可以使用strip来防止这种情况:

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

出于类似的原因,在将参数传递给函数(包括foreach.

于 2013-03-13T06:28:34.127 回答