2011-08-14 15 views
0

私は、より大きなシステムの一部として使用するCORBA .idlの定義をコンパイルするために、最初のMakefileを作成しています。私はomniORBのomniidlプログラムを使用して、file.idlを取得し、file.hhfileSK.ccを作成します。各.idlは依存性がなく、コマンドomniidl -bcxx file.idlで作成されます。.idlsをコンパイルするためのMakefile

GNU Makeチュートリアルを読むことで、パターンルールが私の必要とするものを正確に実行できるようです。 .idl変換のターゲットは、GNUマニュアルのSection 10.5.2bisonの例に触発されています。私の主な質問は、実際にこれらのルールをどのように引き起こすのかです。私はすべてのターゲットを入れて、.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ファイルのリストの代わりにオブジェクトファイルのリストにする必要があります。このような何か:

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

(明確にするために、あなたはまた、IDLファイルのリストを保持する変数を導入して、オブジェクトファイルのリストを取得するには、置換参照を使用することができます。

 
IDLS := $(wildcard *.idl) 

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

関連する問題