makefile:使用infix运算符连接文本



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,作为存根OR参数。

假设我更喜欢将变量定义与其特定用途解耦,那么有没有一种更简单的方法可以用预定义的函数来实现这一点?

Louis是正确的:没有神奇的方法可以做到这一点。但是,如果你不是试图删除最后一项或特别对待它,而是特别对待第一项,那么这项工作就更容易理解(我认为);您可以创建一个函数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*

最新更新