[英]How to properly write for loop in Makefile
我瀏覽了一些帖子,但仍然不明白它是如何工作的。
我的要求是:
for i in *.json
do
file = `echo $i |cut -d _ -f2`
echo ${file}
# do the rest tasks
done
如何將上述腳本轉換為 Makefile 的目標?
這是我嘗試過的
foo:
for i in *.json; do \
$(eval FILE = $(shell echo $$i |cut -d _ -f2)); \
echo $(FILE) ;\
done
但它不起作用
使用$(eval)
或$(shell)
是......甚至沒有錯。
foo:
for i in *.json; do \
file=$$(echo "$$i" |cut -d _ -f2); \
echo "$$file"; \
done
請注意文件名變量的引用,以及=
賦值運算符周圍沒有空格,以及任何美元符號的加倍以將其從make
傳遞到 shell。
但是,外殼為此提供了更好的機制;
foo:
for i in *.json; do \
j=$${i#*_}; \
echo "$${j%%_*}"; \
done
也許
foo:
printf '%s\n' *.json \
| sed 's/[^_]*_\([^_]*\)_.*/\1/'
如果您只期望一個下划線,則可以進一步簡化這兩個下划線。
或者,也許您只是在尋找
makefile_variable := $(foreach x,$(wildcard *.json),$(word 2,$(subst _, ,$x)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.