2011-10-24 23 views
2

サードパーティのIDLコンパイラ(rtiddsgen)を使用して成果物を生成するために使用しているmakefileがあります。これはidlファイルを受け取り、それらに関連するC/Adaファイルを吐き出します。 Cファイルはコンパイルされ、ライブラリ(idl_dds_types.a)に格納されますMakefileの依存関係とタイムスタンプ

IDL_TYPES変数にIDLファイルがリストされています。各IDL_TYPESファイル(alerts.idlと例えば)以下の形式のファイル(rtiddsgen経由)が生成されます。

alerts.c 
alerts.h 
alerts_idl.ads 
alerts_idl.adb 

alerts.idlのタイムスタンプがalerts.cよりも新しい場合ので、私が起こるたいのです(またはobj.Linux-i686/alerts.o)ファイルを削除すると、alerts.cファイルが再生成されます。これは起こっていないようです。これを実現するために必要なアイデアは何ですか?私はidlファイルを "タッチ"してからmakeを再実行することでテストしました。ここで

はメイクファイルです:

DDS_OUT_DIR = $(MY_HOME)/DDS/DDS_Types/src 

IDL_DIR=$(MY_HOME)/DDS/DDS_Types/IDL 
IDL_TYPES=common.idl alerts.idl summary.idl 
GENERATED_SOURCES = $(IDL_TYPES:%.idl=%.c) 
GENERATED_HEADERS = $(IDL_TYPES:%.idl=%.h) 

LIBNAME = idl_dds_types 

OBJS_DIR  = obj.$(CPUTYPE) 

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

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

CFLAGS = -m32 -g -DRTI_UNIX -DRTI_32BIT 
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) $(DDS_CPP_DIR)) 

default:  $(GENERATED_OBJS) $(LIBDIR)/lib$(LIBNAME).a 

$(OBJS_DIR)/%.o : %.idl $(DDSCOMMON)/dds_common.h 
     $(C_COMPILER) -o $(OBJS_DIR)/$(*F).o $(DEFINES) $(INCLUDES) $(CFLAGS) -c $(*F).c; \ 
     $(C_COMPILER) -o $(OBJS_DIR)/$(*F)Support.o $(DEFINES) $(INCLUDES) $(CFLAGS) -c $(*F)Support.c; \ 
     $(C_COMPILER) -o $(OBJS_DIR)/$(*F)Plugin.o $(DEFINES) $(INCLUDES) $(CFLAGS) -c $(*F)Plugin.c; \ 

$(LIBDIR)/lib$(LIBNAME).a: $(GENERATED_OBJS) $(CPP_OBJS) 
     @echo "Adding these to lib: " $(OBJS_DIR)/*.o; \ 
     mkdir -p $(LIBDIR) 
     rm -f $(LIBDIR)/lib$(LIBNAME).a 
     $(AR) -cr $(LIBDIR)/lib$(LIBNAME).a $(OBJS_DIR)/*.o 
     ranlib $(LIBDIR)/lib$(LIBNAME).a 

%.idl: 
     @echo "Generating C and Ada from [email protected] ..."; \ 
     $(NDDSHOME)/scripts/rtiddsgen ${IDL_DIR}/[email protected] -d $(DDS_OUT_DIR) -I ${IDL_DIR} -replace -language Ada; # -example i86Linux2.6gcc4.1.2; 



clean: 
     rm -rf $(LIBDIR)/lib$(LIBNAME).a; \ 
     rm -rf $(DDS_OUT_DIR)/*.h; \ 
    rm -rf $(DDS_OUT_DIR)/*.c; \ 
     rm -rf $(DDS_OUT_DIR)/*.gpr; \ 
     rm -rf $(DDS_OUT_DIR)/samples; \ 
     rm -rf $(DDS_OUT_DIR)/*.xml; \ 
     rm -rf $(DDS_OUT_DIR)/makefile_*; \ 
     rm -rf $(DDS_OUT_DIR)/bin; \ 
     rm -rf $(DDS_OUT_DIR)/summary_idl*; \ 
     rm -rf $(DDS_OUT_DIR)/common_idl*; \ 
     rm -rf $(DDS_OUT_DIR)/alerts_idl*; \ 
     rm -rf $(DDS_OUT_DIR)/$(OBJS_DIR); 

答えて

4

あなた%.idl:ルールのようなルールがどのようにの.idlファイルから物事を生成しない、の.idlファイルを生成する方法を作るように指示します。これを%.c: %.idlに変更したい - .idlファイルから.cファイルを生成する方法

あなたが望むもののほとんどはそうするでしょう。唯一の問題は、.cファイルを生成せずに、またはライブラリを再構築することなく、.ads/.adbファイルを生成できるようにしたい場合です。

関連する問題