0

この問題は私を夢中にさせています!これが私の簡単なメイクファイルです:

SOURCES = a b c

$(foreach var,$(SOURCES),echo $(var);)

all:
    @echo done

make 3.8では、Makefile:3: *** unterminated call to function 'foreach': missing ')'. Stop.

make 3.81 では、Makefile:3: *** missing separator. Stop.

しかし、foreach の行を「all」ターゲット内に配置すると、問題なく動作します。ヘルプ!!

4

2 に答える 2

0

これforeachにより、一連のechoコマンドが生成されます。これらをメイクファイルの最上位に置くことはできません。$(info)代わりに使用してください:

$(foreach var,$(SOURCES),$(info $(var)))

例:

$ make
a
b
c
done
于 2013-09-24T18:48:42.213 に答える
0

Make構文とシェル構文を混同しています。

このステートメントをルールの外に置くと、次のように展開されます。

エコー a; エコー b; エコー c;

echo1)は有効な Make コマンドではなく、2) make は展開されたステートメントの値をコマンドとして受け入れないため ( を使用しない限り)、これは Make に関する限りナンセンスですeval

あなたが持っている必要があります:

  1. 「echo a;」を試してみたところ、ルールの外では機能しないことがわかりました。
  2. `info` のことを知って、その行が機能するようになりました。
  3. foreach... を試してみたところ、うまくいかないことがわかりました。
  4. eval について知りました。
于 2013-09-24T18:51:50.840 に答える