2009-12-18 4 views
0

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

+0

Какой инструмент 'make' вы используете? Существует стандарт * defacto *, но у многих есть специализированные расширения. Кстати, пример показывает 'gmake', но это может быть что угодно. –

+0

@Thomas: gmake - это usuall GNU make, а с '$ (wildcard)' 's и' $ (foreach) 's там было лучше ... – dmckee

ответ

1

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

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

моя проблема в основном - это файл ddmic_srv.h должен быть сгенерированным, когда я запускаю этот make file.this make файл работает правильно, генерируя файл ddmic_srv.h на одном из серверов, но не на сервере, где мне это нужно. Так я вставил часть файла make, где код для генерации файл ddmic_srv.h должен быть сгенерирован. Конечно, есть некоторая проблема с кодом или некоторым configuartion.but, я не могу точно понять это. – Vijay

Смежные вопросы