2011-05-02 4 views
0

내가 작업하고있는 makefile로 문제를 디버그하려고한다. 혼란스러운 것은 명령 행에서 실행할 때 대상이 작동하지만 내 makefile에서는 작동하지 않는다는 것이다. 여기 리눅스에서 문제 확인

은 메이크입니다 :

DDS_OUT_DIR = $(PWD) 

IDL_DIR=/adapts/ad/irad-c2/idl_dds 
IDL_TYPES=common.idl 
GENERATED_SOURCES = $(IDL_TYPES:%.idl=%Support.cxx) $(IDL_TYPES:%.idl=%Plugin.cxx) $(IDL_TYPES:%.idl=%.cxx) 
GENERATED_HEADERS = $(IDL_TYPES:%.idl=%Support.h) $(IDL_TYPES:%.idl=%Plugin.h) $(IDL_TYPES:%.idl=%.h) 

OBJS_DIR  = obj.$(CPUTYPE) 

GENERATED_OBJS = $(GENERATED_SOURCES:%.cxx=$(OBJS_DIR)/%.o) 

LIBDIR = ../../lib.$(CPUTYPE) 
BINDIR = ../../../../bin.$(CPUTYPE) 
CC  = $(C_COMPILER) 
CXX  = $(CPP_COMPILER) 
OS  = $(shell uname) 
DDSCOMMON = ../../Common/src 

CFLAGS = -m32 -g 
CXXFLAGS = -m32 -g 
LDFLAGS = -m32 -static-libgcc 
SYSLIBS = -ldl -lnsl -lpthread -lm -lc 


DEFINES_ARCH_SPECIFIC = -DRTI_UNIX 

DEFINES = $(DEFINES_ARCH_SPECIFIC) $(cxx_DEFINES_ARCH_SPECIFIC) 

INCLUDES = -I. -I$(NDDSHOME)/include -I$(NDDSHOME)/include/ndds 
INCLUDES += -I$(DDSCOMMON) 

LIBS = -L$(NDDSLIBDIR) -L$(LIBDIR) -lrt \ 
     -lnddscppz -lnddscz -lnddscorez $(SYSLIBS) $(OS_SPECIFIC_LIBS) 

COMMONLIBSRC = $(DDSCOMMON)/dds_common.cxx 
COMMONLIBOBJS = $(DDSCOMMON)/obj.$(CPUTYPE)/%.o 

$(shell mkdir -p $(OBJS_DIR) $(DDSCOMMON)/obj.$(CPUTYPE)) 

default: ${IDL_TYPES} $(GENERATED_OBJS) 

$(OBJS_DIR)/%.o : %.cxx %.h $(DDSCOMMON)/dds_common.h 
    $(CPP_COMPILER) -o [email protected] $(DEFINES) $(INCLUDES) $(CXXFLAGS) -c $< 

%.idl: 
    @echo "Generating CXX from [email protected] ..." $(GENERATED_OBJS); \ 
    $(NDDSHOME)/scripts/rtiddsgen ${IDL_DIR}/[email protected] -d $(DDS_OUT_DIR) -I ${IDL_DIR} -replace -language C++; 

난 그냥 이렇게 할 경우 : 그게 내가이 출력을 얻을 완료

을 %의 .idl 대상 미세이라고

make 
:

Generating CXX from common.idl ... obj.Linux-i686/commonSupport.o obj.Linux-i686/commonPlugin.o obj.Linux-i686/common.o 
Running rtiddsgen version 4.5d, please wait ... 
Done 
make: *** No rule to make target `obj.Linux-i686/commonSupport.o', needed by `default'. Stop. 

그러나 나는 때를 다시 실행하고 잘 작동, 그래서 모든 것이 컴파일 ...

는 왜 이런 일이 한 번에 작동하지 않습니다?

답변

2

commonSupport.cxxcommon.idl에 의존하는 것으로 보입니다. 이것을 make에게 전해주세요.

commonSupport.cxx: common.idl 
    @echo "Generating CXX from [email protected] ..." $(GENERATED_OBJS); \ 
    $(NDDSHOME)/scripts/rtiddsgen ${IDL_DIR}/[email protected] -d $(DDS_OUT_DIR) -I ${IDL_DIR} -replace -language C++; 

또는 보장하기 위해 모든 종속성이 맞다 :

$(GENERATED_SOURCES): common.idl 
    .... steps to make GENERATED_SOURCES from common.idl