如何保留额外的空间以防止破坏此Makefile?

如何保留额外的空间以防止破坏此Makefile?,makefile,gnu-make,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\u DIR=BAR后

我习惯于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\u DIR=BAR
后面有空格,则make失败,出现以下错误:

'make: *** bar: Is a directory.  Stop.'
我想我明白这里发生了什么-include文件路径中有一个空格,因此make认为我想要包含一个目录,因此出现了错误。如果删除了空间,并且存在文件
foo/comp.mk
bar/comp.mk
,make将无误运行


我的问题是,有没有办法防止额外的空间导致此故障?

您可以使用
strip
来防止:

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

出于类似的原因,在向函数传递参数时,通常明智的做法是避免逗号后加空格,包括
foreach

谢谢。最初我尝试使用
strip
,但我必须将它放在错误的位置。make始终在变量赋值中的非空值后保留空格。除了strip之外,另一个选项是使用一个编辑器,它有一个合适的makefile模式,并会警告您(或者只是删除)多余的行尾空白。