makefile:使用中缀运算符连接文本

makefile:使用中缀运算符连接文本,makefile,gnu-make,Makefile,Gnu Make,GNU make中是否有一个简单的函数来连接文本并在单个部分之间放置一个“运算符”?我的意思是,操作符令牌必须出现n-1次,仅在两个令牌之间。 示例:我有一个变量,其中包含要从编译中排除的路径列表: EXCLUDE_PATH = $(BASE_DIR)/aaa* $(BASE_DIR)/bbb* 稍后,我想使用该变量为find命令生成排除规则,如: -not \( -path '$(BASE_DIR)/aaa*' -o -path '$(BASE_DIR)/bbb*' \) 注意它们之间的-

GNU make中是否有一个简单的函数来连接文本并在单个部分之间放置一个“运算符”?我的意思是,操作符令牌必须出现n-1次,仅在两个令牌之间。 示例:我有一个变量,其中包含要从编译中排除的路径列表:

EXCLUDE_PATH = $(BASE_DIR)/aaa* $(BASE_DIR)/bbb*
稍后,我想使用该变量为
find
命令生成排除规则,如:

-not \( -path '$(BASE_DIR)/aaa*' -o -path '$(BASE_DIR)/bbb*' \)
注意它们之间的
-o
。 第一次尝试:

FIND_EXCL_LIST = $(EXCLUDE_PATH:%=-path '%' -o)
FIND_EXCL_RULE = -not \( $(FIND_EXCL_LIST) \)
但这会在最后留下一个额外的
-o
,从而导致错误

目前,我求助于在末尾添加一个
-false
,作为存根或参数


假设我更喜欢将变量定义与它们的特定用途分离,那么是否有一种更简单的方法可以使用预定义函数来实现这一点呢?

路易斯是正确的:没有神奇的方法可以做到这一点。但是,如果你不是试图删除最后一项或特别对待它,而是特别对待第一项,那么这项工作就更容易理解(我认为);您可以创建一个函数
combine
,该函数包含两个参数:第一个是要放在单词之间的文本,第二个是要组合的单词的空格分隔列表:

combine = $(word 1,$2) $(foreach W,$(wordlist 2,$(words $2),$2),$1 $W)
现在您可以这样使用它:

$(call combine,-o,$(EXCLUDE_LIST))
要获得如下输出:

$(BASE_DIR)/aaa* -o $(BASE_DIR)/bbb*

多亏了这两个功能,我从没想过你们可以用各种文本函数和“call”完成如此复杂的任务。我之所以选择这个答案,是因为“combine”功能非常适合,并且可以在许多情况下重复使用。另一个答案呢??“4小时前被所有者删除”。我猜Louis不想放弃它。这里有一个
commafy
函数,以防有人发现这篇文章在寻找它。因为
$(单词列表…
想要将你给它的任何东西用空格隔开,所以你需要一种稍微不同的方法将逗号固定在正确的位置:
commafy=$(foreach W,$(filter out$(lastword$1),$1),$W,)$(lastword$1)