Makefile用于编译.idls

时间:2011-08-14 15:54:27

标签: c++ makefile corba idl

我正在编写我的第一个Makefile来编译一些CORBA .idl定义,以用作更大系统的一部分。我使用omniORB的omniidl程序,该程序需要file.idl并创建file.hhfileSK.cc。每个.idl都没有依赖关系,并使用命令omniidl -bcxx file.idl创建。

从阅读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 $@

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

    all : $(wildcard *.idl)

在相关说明中,通常应该在哪里放置自动生成的代码?我打算将已编译的.o文件复制到我的项目的/lib/include目录中,但.hh.cc文件应保留在src中文件夹或放在别处,以方便清洁过程?

1 个答案:

答案 0 :(得分:3)

all目标的依赖关系应该是目标文件列表,而不是idl文件列表。像这样:

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

(为清楚起见,您还可以引入一个变量来保存idl文件列表,然后使用替换引用来获取目标文件列表:

IDLS := $(wildcard *.idl)

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