如何保留一个额外的空间来打破这个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.mk
和bar/comp.mk
存在,make将会正常运行。
我的问题是,是否有某种方法来防止引起此故障的额外空间?
答
您可以使用strip
防止的是:
include $(foreach pkg, $(PKGS), $(strip $($(pkg)_DIR))/comp.mk)
出于同样的理由,它往往是明智的,避免空格逗号之后传递参数时功能,包括foreach
。
+0
谢谢。我最初尝试使用“strip”,但我必须把它放在错误的地方。 – dwikle 2013-03-14 01:03:39
使变量赋值中的非空值后总是保留空白。除strip之外,另一个选项是使用一个具有体面的makefile模式的编辑器,并会警告您(或只是为您删除)多余的行尾空白。 – MadScientist 2013-03-14 13:20:40