List Makefile-循环浏览列表并选择特定值
我正在尝试这样做(假设$input是由用户提供的):List Makefile-循环浏览列表并选择特定值,list,if-statement,for-loop,makefile,foreach,List,If Statement,For Loop,Makefile,Foreach,我正在尝试这样做(假设$input是由用户提供的): LIST=pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8 pre9 pre10 开始=0 前缀为$(列表);做\ 如果$(输入)==$(前缀),则 开始=1 恩迪夫\ 如果$(开始)==1,则\ 如果[-f$(前缀)];然后,;其他的fi 恩迪夫\ 完成 我的问题是上面提到的两个if。我不知道如何在迭代列表时从列表中选择特定的字符串值(如果$(输入)==$(前缀),并且我不知道如何检查值是1还是0(如果$(开
LIST=pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8 pre9 pre10
开始=0
前缀为$(列表);做\
如果$(输入)==$(前缀),则
开始=1
恩迪夫\
如果$(开始)==1,则\
如果[-f$(前缀)];然后,;其他的fi
恩迪夫\
完成
我的问题是上面提到的两个if。我不知道如何在迭代列表时从列表中选择特定的字符串值(如果$(输入)==$(前缀),并且我不知道如何检查值是1还是0(如果$(开始)==1)
我使用这段代码的目的是对具有相同文件名但前缀不同的不同目录使用相同的makefile。有时,一个目录可能包含具有不同前缀的文件的多个版本,我想定义这些前缀的层次结构(在我的示例中由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
LIST=pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8 pre9 pre10
开始=0
输入=somename
文件名=随便什么
一些目标:
对于$(列表)中的前缀;do\
如果测试“$(输入)”=$$前缀,则\
开始=1\
fi\
如果测试“$(开始)”=1,则\
如果test-f$$prefix$(文件名);则\
; \
否则\
; \
fi\
fi\
完成
但是您没有告诉我们和应该是什么,所以我假设它们是其他make
变量。基本上make
规则看起来像一个长的shell行,命令用分号分隔,行用反斜杠继续。$$被make
替换为一个$,这就是为什么引用shell varIABLE($$前缀)需要两美元
您的
make
手册(键入manmake
包含整个故事,阅读和理解起来很有趣。)今天就成为make
大师!一定要理解make
变量和shell变量之间的区别。这有点不清楚。如果确实存在pre4,这个过程是否应该继续到pre5、pre6…?好吧,这个想法不是要继续。但这不是我的问题。我想我知道如何处理这个问题(在中再次将START设置为0)
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