3

重要な行だけを取り出しました。

SHELL := /bin/bash

leaks: build_eagle_test
    grep EagleMemory_Allocate -r eagle | perl -nle 'm/"(.*)"/; print $1' | sort | uniq > leaks.alloc.tmp
    grep "EagleMemory_Mock(" -r eagle_test | perl -nle 'm/"(.*)"/; print $1' | sort | uniq > leaks.alloc_test.tmp

bashで行を実行しても問題ありません。しかし、makeファイルからgrepはoutファイルにパイプするだけです(その間の段階を効果的に無視します...)

4

1 に答える 1

10

$ように引用する必要があります$$

SHELL := /bin/bash

leaks:
    grep EagleMemory_Allocate -r eagle | perl -nle 'm/"(.*)"/; print $$1' | sort | uniq > leaks.alloc.tmp
    grep "EagleMemory_Mock(" -r eagle_test | perl -nle 'm/"(.*)"/; print $$1' | sort | uniq > leaks.alloc_test.tmp

問題は、Make が bash 構文について何も知らず'"、コマンド ラインの引用符をすべて無視していることです。$1を Make コンテキストの変数の値として解釈していますが1、そのような変数がないため、空白になります。

これは、元の Makefile から実行したコマンドをエコーするときの Make の出力で確認できます。

$ make
grep EagleMemory_Allocate -r eagle | perl -nle 'm/"(.*)"/; print ' | sort | uniq > leaks.alloc.tmp
grep "EagleMemory_Mock(" -r eagle_test | perl -nle 'm/"(.*)"/; print ' | sort | uniq > leaks.alloc_test.tmp

$1が消えていることに注意してください。

于 2013-01-22T03:05:36.183 に答える