gpt4 book ai didi

makefile:删除重复的单词而不进行排序

转载 作者:行者123 更新时间:2023-12-03 13:42:53 25 4
gpt4 key购买 nike

是否有可能删除单词列表中的重复项而无需在 makefile 中排序?

$(sort foo bar lose)

确实删除了重复项(这对我来说是这种情况下的主要功能),但也进行了排序(在这种情况下对我来说是一个不幸的副作用)。我想避免这种情况。

[更新]

bobbogo 的答案非常有效。只要记住使用 define uniq对于 v3.81 和(没有检查这个) define uniq =对于以后的版本。

拉斯曼斯 ' 如果您的记录分隔符不是空格,则答案也很有效,例如如果您想从 _foo_bar_lose_lose_bar_baz_ 中删除重复项或类似。请记住使用 RSORS awk 选项而不是 tr ,然后用 $(firstword $(shell ... )) 包裹起来

最佳答案

无聊 $eval基于方法:

define uniq =
$(eval seen :=)
$(foreach _,$1,$(if $(filter $_,${seen}),,$(eval seen += $_)))
${seen}
endef

w := z z x x y c x

$(info $(sort $w))
$(info $(call uniq,$w))

极端恶魔使标准库递归调用(递归使被认为极端恶魔?):
uniq = $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1)))

值得注意的是,在第二个公式中没有损坏任何变量(参见第一个中的 seen)。 最好仅此而已(鉴于缺少本地人)!

编辑

我上面关于递归 make 的晦涩评论似乎有些困惑。
在这篇文章的上下文中,“递归”是指递归函数。
它真的与可恶的递归 make 无关。

uniq 的后一个(递归)定义非常好,性能好,体积小,绝对是可以使用的。

关于makefile:删除重复的单词而不进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16144115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com