gpt4 book ai didi

loops - 迭代 Makefile 中的列表 - 重温

转载 作者:行者123 更新时间:2023-12-04 05:05:28 25 4
gpt4 key购买 nike

我喜欢 Dylan 对“迭代 Makefile 中的列表”这个问题的回答,
Iterating over lists in Makefiles?并尝试做类似的事情,但遇到了麻烦。也许sonmeone可以提供帮助。

我的生成文件:

PARTITION_TMP:=Joe|red \
Carl:Mary|white \
Fritz|blue

partition_tmp:
@- $(foreach partition_tmp,$(PARTITION_TMP), \
$(eval N = $(word 1, $(subst |, ,$(partition_tmp)))) \
$(eval C = $(word 2, $(subst |, ,$(partition_tmp)))) \
$(call print_tmp, $N, $C) \
)

define print_tmp
@echo in print_tmp
@echo set_global -name PARTITION_NAME $(1)
@echo set_global -color PARTITION_COLOR $(2) -name PARTITION_NAME $(1)
endef

当我运行 make 时,我得到以下信息:

in print_tmp

set_global -name PARTITION_NAME Joe

set_global -color PARTITION_COLOR red -name PARTITION_NAME Joe @echo in print_tmp

set_global -name PARTITION_NAME Carl:Mary

set_global -color PARTITION_COLOR white -name PARTITION_NAME Carl:Mary @echo in print_tmp

set_global -name PARTITION_NAME Fritz

set_global -color PARTITION_COLOR blue -name PARTITION_NAME Fritz



我不明白为什么在对 print_tmp 的前两次调用结束时收到“@echo in print_tmp”(或者它可能是对 print_tmp 的最后两次调用的开始?)

有人可以帮忙吗?

谢谢,
马克

最佳答案

是因为你们串在一起print_tmp块在一行上——但块有内部换行符。考虑:

partition_tmp:
$(foreach color, red blue, \
$(call print_tmp, $(color)) \
)

define print_tmp
@echo first $(1)
endef
foreach评估为 @echo first red @echo first blue ,然后作为 shell 命令执行并产生:
first red @echo first blue

现在向宏添加另一行:
partition_tmp:
$(foreach color, red blue, \
$(call print_tmp, $(color)) \
)

define print_tmp
@echo first $(1)
@echo second $(1)
endef

现在 foreach评估为
@echo first red 
@echo second red @echo first blue
@echo second blue

它产生:
first red 
second red @echo first blue
second blue

要纠正问题,只需添加一个空行:
define print_tmp
@echo in print_tmp
@echo set_global -name PARTITION_NAME $(1)
@echo set_global -color PARTITION_COLOR $(2) -name PARTITION_NAME $(1)

endef

关于loops - 迭代 Makefile 中的列表 - 重温,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15549811/

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