2

我在 Makefile 中将一行脚本传递给foreach函数,如下所示:

flag:
        $(foreach f, $*.txt, printf "%s\n" 0a "$(grep -o '[0-9]\+' $f | sed 's/.*/read \"&\"/')" "" . w q | ed $f)

可以在此处找到此脚本行的作用。我只是很困惑为什么它不能以这种方式工作,因为如果我将该行放入一个单独的脚本中并像这样从 Makefile 调用它:

flag:
        $(forech f, $*.txt, ./script $f)

它工作正常。

我还尝试了 shellfor循环,如下所示:

flag:
        for f in $*.txt ; do \
          printf "%s\n" 0a "$(grep -o '[0-9]\+' $f | sed 's/.*/read \"&\"/')" "" . w q | ed $f ; \
        done

仍然没有运气。我必须触及 Makefiles 的一些微妙点,有人可以启发我吗?谢谢。

4

2 回答 2

7

$ 符号太多和不够!这列出了 *.txt 文件 - 注意 $$F:

all:
    for F in *.txt ; do \
    echo $$F ; done 
于 2011-06-04T11:14:41.323 回答
0

$解决方案是:在以 开头的序列之前再添加一个grep

flag:
        $(foreach f, $*.txt, printf "%s\n" 0a "$$(grep -o '[0-9]\+' $f | sed 's/.*/read \"&\"/')" "" . w q | ed $f)

或改用旧的反引号

flag:
        $(foreach f, $*.txt, printf "%s\n" 0a "`grep -o '[0-9]\+' $f | sed 's/.*/read \"&\"/'`" "" . w q | ed $f)
于 2011-06-07T18:11:20.233 回答