2011-08-14 4 views
0

큰 시스템의 일부로 사용할 CORBA .idl 정의를 컴파일하기 위해 첫 Makefile을 작성하고 있습니다. 저는 omniidl 프로그램을 사용하여 file.idl을 사용하고 file.hhfileSK.cc을 만듭니다. 각 .idl은 종속성이 없으며 omniidl -bcxx file.idl 명령으로 작성됩니다..idls 컴파일을위한 Makefile

GNU Make 튜토리얼을 읽는 것부터 패턴 규칙이 내가 원하는 것을 정확하게 수행 할 것으로 보인다. .idl 변환 대상은 bison 예에서 GNU 설명서 Section 10.5.2의 영향을받습니다. 내 주요 질문은 어떻게 실제로 이러한 규칙을 실행합니까? 나는 모든 목표를 설정하고 .idl에 대한 의존성을 도입하려했지만 아무 소용이 없었습니다.

OMNIIDL := omniidl 
    DEPENDFLAGS := -g 
    CXX := g++ 
    CXXFLAGS := $(DEPENDFLAGS) -Wall -Werror -ansi 

    %.o : %.cc 
     $(CXX) $(CXXFLAGS) -c $< -o [email protected] 

    %.hh %SK.cc : %.idl 
     $(OMNIIDL) -bcxx $< 

    all : $(wildcard *.idl) 

관련 메모에서 일반적으로 자동 생성 코드는 어디에 배치해야합니까? 컴파일 된 .o 파일을 내 프로젝트의 /lib 또는 /include 디렉토리로 복사하지만 .hh.cc 파일은 src 폴더에 남겨 두거나 정리 프로세스를 쉽게하기 위해 다른 곳에 배치해야합니까?

답변

2

all 대상의 종속성은 idl 파일 목록 대신 개체 파일 목록이어야합니다. 이런 식으로 뭔가 :

 
IDLS := $(wildcard *.idl) 

all: $(IDLS:%.idl=%SK.o) 

:

 
all: $(patsubst %.idl, %SK.o, $(wildcard *.idl)) 

(명확성을 위해, 당신은 또한 IDL 파일의 목록을 길게 누른 다음 오브젝트 파일의 목록을 얻을 수있는 대체 참조를 사용하는 변수를 소개 할 수)