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参数。
如果我更喜欢将变量定义与其特定用途分离,那么使用预定义函数可能有更简单的方法吗?
答案 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*