簡體   English   中英

如何在 Makefile 中正確編寫 for 循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM