2009-12-18 3 views
0

나는 다음과 같은 문장이있다 메이크가 :이 같은메이크 디버깅

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' 

을 그래서 보인다 : 나는 빌드를 실행 한 후

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) 

, 나는 아래의 것과 같은 메시지를 얻을를 foreach 명령을 발행 할 때 어떤 문제가 있습니까? 이 makefile을 처음 접했을 때 아무도 makefile을 디버그하는 방법을 제안 할 수 있습니까?

+0

어떤 make 도구를 사용하고 있습니까? * defacto * 표준이 있지만 많은 경우 특수 확장이 있습니다. BTW 예제는'gmake'를 보여줍니다, 그러나 그것은 아무것도 될 수 있습니다. –

+0

@Thomas : gmake는 GNU make를 사용합니다.'$ (와일드 카드)'와'$ (foreach)'가 있으면 더 좋았을 것입니다. – dmckee

답변

1

이것은 약간 엉망이며 실행 환경에 대해 더 많이 알지 못해도 진단하기가 어렵습니다.

  • 이 당신 만 대상 (dmic_srv.h)에 정의 된, 그래서 당신은 GNU가 인수없이 만들어 실행할 때 그 대상을 사용합니다 : 그러나 몇 가지 기본 사항 갈 수 있습니다.
  • 헤더를 소스 파일에 의존하게 만드는 것은 입니다. 매우입니다. 나는 이것이 당신이하기를 원하는지 의심 스럽습니다.하지만 코드 생성을하고 있으므로 괜찮습니다.
  • GNU make에는 두 가지 종류의 지정이 있습니다. 일반 =은 지연 제거 기능이 있지만 :=은 즉시 평가해야합니다. 이것은 $(foreach)이 실행중인 환경에 영향을줍니다.
  • USER_PRE_TARGETS의 두 가지 정의가 있지만 어디에도 사용하지 마십시오. Added :이 정의에 모두 $(foreach) 명령이 존재한다고 가정하면,이 명령을 제거하고 더 좋아 졌는지 확인할 수 있습니다.
+0

내 관심사는 기본적으로 ddmic_srv.h 파일입니다. 이 파일을 만들 때 file.this 파일을 제대로 실행하면 서버 중 하나에서 ddmic_srv.h 파일을 생성하지만 서버가 필요하지 않은 곳에 생성됩니다. 파일을 생성하기위한 코드가있는 곳에 it.so를 붙여 넣습니다. ddmic_srv.h 파일을 생성해야합니다. 솔직히 거기에 몇 가지 문제가 코드 또는 일부 configuartion.but 나는 그것을 정확히 알아낼 수 없습니다. – Vijay