反转make变量中字符串顺序的最简单方法
时间:2020-03-05 18:50:16 来源:igfitidea点击:
假设我们在makefile片段中有一个变量,如下所示:
MY_LIST=a b c d
然后,我该如何反转该列表的顺序?我需要:
$(warning MY_LIST=${MY_LIST})
显示
MY_LIST=d c b a
编辑:真正的问题是
ld -r some_object.o ${MY_LIST}
产生带有未定义符号的a.out,因为MY_LIST中的项实际上是档案,但顺序错误。如果将MY_LIST的顺序颠倒,它将正确链接(我认为)。如果我们知道正确执行链接顺序的更聪明的方法,请告诉我。
解决方案
回答
h!我本可以使用shell脚本:
(对于$ {MY_LIST}中的d;回显$$ d;完成)| TAC
回答
我们还可以使用ld定义搜索组:
ld -r foo.o -( a.a b.a c.a -)
将遍历a.a,b.a和c.a,直到该组中的任何对象都无法满足新的未解析符号。
如果我们使用的是gnu ld,则还可以执行以下操作:
ld -r -o foo.o --whole-archive bar.a
这样做稍微强一点,因为它将包括bar.a中的每个对象,无论它是否满足foo.o中未解析的符号。
回答
纯GNU make的解决方案:
default: all foo = please reverse me reverse = $(if $(1),$(call reverse,$(wordlist 2,$(words $(1)),$(1)))) $(firstword $(1)) all : @echo $(call reverse,$(foo))
给出:
$ make me reverse please