gpt4 book ai didi

list - Makefile - 遍历列表并选择特定值

转载 作者:行者123 更新时间:2023-12-04 16:34:01 30 4
gpt4 key购买 nike

我正在尝试做这样的事情(假设 $input 是由用户提供的):

LIST = pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8 pre9 pre10
START = 0

for prefix in $(LIST); do \
if $(input) == $(prefix) then
START = 1
endif \
if $(START) == 1 then \
if [ -f $(prefix)<file_name> ]; then <do_A>; else <do_B>; fi
endif \
done

我的问题是上面提到的两个 if。我不知道如何在迭代列表时从列表中选择特定的字符串值(如果 $(input) == $(prefix) then)并且我不知道如何检查值是 1 还是 0(如果 $(START) == 1 那么)。

我对这段代码的意图是对具有相同文件名但具有不同前缀的不同目录使用相同的生成文件。有时,一个目录可能包含具有不同前缀的文件的多个版本,我想定义这些前缀的层次结构(在我的示例中由 LIST 定义)。当用户提供一个版本时,想法是开始搜索最新版本,从他提供的版本开始(例如,如果用户提供 pre4,那么我需要先搜索 pre4,如果它不存在 - 我我将继续搜索 pre5 等等。但在这个例子中,我不会搜索 pre1,即使它确实存在于当前目录中)。

有人知道我该怎么做吗?

提前致谢。

最佳答案

如果这应该是 Makefile 中的命令,语法必须是这样的:

LIST = pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8 pre9 pre10
START = 0
input = somename
file_name = whatever

some_target:
for prefix in $(LIST); do \
if test "$(input)" = $$prefix; then \
START=1; \
fi; \
if test "$(START)" = 1; then \
if test -f $$prefix$(file_name); then \
<do_A>; \
else \
<do_B>; \
fi; \
fi; \
done

但是您没有告诉我们 <input> 和 应该是什么,所以我假设它们是其他 make 变量。基本上, make 规则看起来像一长串 shell 行,命令由分号分隔,行以反斜杠继续。 $$ 被 make 替换为单个 $,这就是为什么引用 shell 变量($$prefix)需要两美元。

您的 make 手册(键入 man make 有完整的故事,阅读和理解起来很有趣。)今天就成为 make 大师!请务必理解 make 变量和 shell 变量之间的区别。

关于list - Makefile - 遍历列表并选择特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7086096/

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