开发者

debugging a makefile

I have a makefile which has statements like below:

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)

After I run the build, I get messages like the ones below:

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/cm开发者_如何学编程i9dl'

So it seems like there is some issue with the foreach command issued? As I am new to these makefiles, could anybody please suggest how to debug the makefile?


This is a bit of a mess, and it is hard to diagnose without knowing more about the environment it is running it. But lets go with a few basics:

  • You have only defined on target (dmic_srv.h), so when you run GNU make without arguments it will use that target.
  • Making the header depend on the source files is very unusual, I doubt that is what you want this to do. but you're doing code generation, so you are OK there.
  • There are two different kinds of assignment in GNU make. Plain = has lazy evaulation, but := forces immediate evaluation. This effects the environment in which you $(foreach )'s are running.
  • You have two definitions of USER_PRE_TARGETS, but never use it anywhere. Added: Given that the all the $(foreach ) commands exist in these definitions, you might just remove these and see if it get better.
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜