Makefile 当变量定义有尾随空格时,如何防止GNU Make执行

Makefile 当变量定义有尾随空格时,如何防止GNU Make执行,makefile,gnu,gnu-make,Makefile,Gnu,Gnu Make,我的makefile中有一个简单的变量定义: THIS := ~/edan 它在行中有尾随空格 后来,我用这个定义了另一个变量: WARES := $(THIS)/wares 实际定义的变量是/home/directory/edan 然后,makeclean规则被删除了/home/directory/edan,而不是我想要的 如果一行有尾随空格,如何防止生成文件执行 尽管您可以编写Makefile,以便它检查变量是否有尾随空格,并在找到一些空格时退出,但是有更好

我的makefile中有一个简单的变量定义:

THIS         := ~/edan 
它在行中有尾随空格

后来,我用这个定义了另一个变量:

WARES       := $(THIS)/wares
实际定义的变量是
/home/directory/edan

然后,
makeclean
规则被删除了
/home/directory/edan
,而不是我想要的


如果一行有尾随空格,如何防止生成文件执行

尽管您可以编写Makefile,以便它检查变量是否有尾随空格,并在找到一些空格时退出,但是有更好的方法来处理这种情况

在本例中,我建议使用
addsuffix
函数链接
$(this)
/wares
,而不是手动操作。
addsuffix
函数将为您去除尾随空格。换言之:

WARES := $(addsuffix /wares,$(THIS))
如果确实希望它在发现尾随空格时退出,可以执行以下操作:

THIS := ~/edan
ifneq "$(THIS)" "$(strip $(THIS))"
    $(error Found trailing whitespace)
endif

哎哟最好不要根据文件夹的绝对名称删除它们——使用相对路径,如
rm-rf./wares
。如果它不是makefile所在的子目录,请使用:
(cd$(THIS)和&rm-rf./wares)