отладка make-файла - PullRequest
       6

отладка make-файла

0 голосов
/ 18 декабря 2009

У меня есть make-файл, в котором есть такие выражения, как показано ниже:

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? Поскольку я новичок в этих make-файлах, кто-нибудь может предложить, как отладить make-файл?

1 Ответ

1 голос
/ 19 декабря 2009

Это немного беспорядок, и трудно диагностировать, не зная больше о среде, в которой он работает. Но давайте рассмотрим несколько основ:

  • Вы определили только для цели (dmic_srv.h), поэтому при запуске GNU make без аргументов она будет использовать эту цель.
  • Зависимость заголовка от исходных файлов очень необычно, Я сомневаюсь, что это именно то, что вы хотите. но вы делаете генерацию кода, так что вы в порядке есть.
  • В GNU make есть два разных типа назначения. Обычная = имеет ленивую оценку, но := требует немедленной оценки. Это влияет на среду, в которой вы работаете $(foreach ).
  • У вас есть два определения USER_PRE_TARGETS, но никогда нигде не используйте его. Добавлено: Учитывая, что все команды $(foreach ) существуют в этих определениях, вы можете просто удалить их и посмотреть, улучшится ли это.
...