私は、特定のターゲットに対してmakefileでforeachを使用しています。makefileターゲットのforeach&silencer
my_Target:
$(foreach x,$(MY_TARGET_DIRS), @echo " BUILD $(x)";$(Q)$(MAKE) --directory=$(x) LIB_DIR=$(MY_LIB_DIR) $(MY_TARGET_RULES);)
これが意図され、文字列が進行中であるビルド伝えるために印刷された後のmakefileは、MY_TARGET_DIRSのすべての指定されたディレクトリが含まれて呼び出します。
Q変数は、以下のように定義されます。
# Silent per default, 'make V=1' shows all compiler calls.
ifneq ($(V),1)
Q := @
endif
だから、V = 1が定義されている場合は、makeコマンドが冗長であること。
V = 1の場合は、出力ログは次のとおりです。
make my_Target V=1
BUILD /dir1
make[1]: Entering directory `/dir1'
make[1]: Nothing to be done for `elf'.
make[1]: Nothing to be done for `bin'.
make[1]: Leaving directory `/dir1'
/bin/sh: @echo: command not found
make[1]: Entering directory `/dir2'
make[1]: Nothing to be done for `elf'.
make[1]: Nothing to be done for `bin'.
make[1]: Leaving directory `/dir2'
私はV = 1を定義しない場合は、出力ログですが:
make my_Target
BUILD /dir1
/bin/sh: @make: command not found
/bin/sh: @echo: command not found
/bin/sh: @make: command not found
make: *** [my_Target] Error 127
どのように私は私が望む動作を得ることができます正しく?
Bye!
'かなりMakefileの構築物(ないbashの1)である、とのこと_mustのための' @レシピの開始_。 Bashは認識されないシンボルで窒息しています。 – HardcoreHenry
また、エコーを処理する代わりに/より良い(?)方法については、http://make.mad-scientist.net/managing-recipe-echoing/を参照してください。 – MadScientist