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

时间:2015-03-27 10:15:42

标签: 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*' \)

注意它们之间的-o。 第一次尝试:

FIND_EXCL_LIST = $(EXCLUDE_PATH:%=-path '%' -o)
FIND_EXCL_RULE = -not \( $(FIND_EXCL_LIST) \)

但最后会留下额外的-o,从而导致错误。

目前我最后在句末添加-false作为存根OR参数。

如果我更喜欢将变量定义与其特定用途分离,那么使用预定义函数可能有更简单的方法吗?

1 个答案:

答案 0 :(得分:2)

路易斯是正确的:没有神奇的方法可以做到这一点。但是,如果不是试图删除最后一个项目或专门对待它,而是专门处理第一个项目,工作要简单易懂(我认为);你可以创建一个带有两个参数的函数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*