0

以下のようなステートメントを持つmakefileがあります。

TOPICS = dmic
SRV_MODE =
ifeq "$(SRV_FLAG)"   "ON"
        SRV_MODE =  2
endif
vpath d%_srv.h $(CNT_PATH)

USER_PRE_TARGETS := $(foreach topic,$(TOPICS),$(topic)_srv.h)

dmic_srcs = $(wildcard $(CCWSCA)/dmic/src/*.c) \
              $(wildcard $(CCWSCA)/dmic/src/*.ppc)

dmic_srv.h: $(dmic_srcs)
        srvgen dmic $(SRV_MODE)

users_topic =
users_topic := $(shell ls -tr $(CCWPA)/$(CCBB)/Makefile.pre* | \
        tail -1 | awk 'BEGIN{FS="Makefile.pre."}{printf("%s\n", $$2);}')

USER_PRE_TARGETS := $(foreach topic,$(users_topic),d$(topic)_srv.h)

ビルドを実行すると、次のようなメッセージが表示されます。

gmake: Entering directory `/veluser2/vel/abp/bvijays/proj/c9mi790V64OG/cmi9dl'
echo dmic
dmic
srvgen dmic 2
Working on directory : /veluser2/vel/abp/bvijays/bb/cmi9dl/v79_0/dmic/src
Working on directory : /velhome/vel/ccvel/ccvel/bb/cmi9dl/v79_0/dmic/src
foreach: No match.
gmake: *** [ddmic_srv.h] Error 1
gmake: Target `pre' not remade because of errors.
gmake: Leaving directory `/veluser2/vel/abp/bvijays/proj/c9mi790V64OG/cmi9dl'

では、発行されたforeachコマンドに問題があるように見えますか?私はこれらのmakefileを初めて使用するので、makefileをデバッグする方法を誰かに提案してもらえますか?

4

1 に答える 1

1

これは少し混乱しており、実行している環境について詳しく知らずに診断するのは困難です。ただし、いくつかの基本事項を説明します。

  • ターゲット ( ) でのみ定義したdmic_srv.hので、引数なしで GNU make を実行すると、そのターゲットが使用されます。
  • ヘッダーをソース ファイルに依存させるのは非常に珍しいことです。しかし、コード生成を行っているので、問題ありません。
  • GNU make には 2 種類の代入があります。Plain=は遅延評価を行いますが、:=即時評価を強制します。これは、 を$(foreach )実行している環境に影響します。
  • には 2 つの定義USER_PRE_TARGETSがありますが、どこでも使用しないでください。追加:すべてのコマンドがこれらの定義に存在することを考えると、$(foreach )これらを削除して、改善されるかどうかを確認することができます。
于 2009-12-19T01:55:30.137 に答える