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

makefile: concatenate text with infix operator

GNU make 中是否有一个简单的函数来连接文本并在各个部分之间放置一个 "operator"?我的意思是,运算符令牌必须出现 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:第一个是要放在单词之间的文本,第二个是要组合的 space 分隔的单词列表:

combine = $(word 1,) $(foreach W,$(wordlist 2,$(words ),), $W)

现在你可以这样使用了:

$(call combine,-o,$(EXCLUDE_LIST))

获得如下输出:

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