【问题标题】:Makefile for compiling .idls用于编译 .idls 的 Makefile
【发布时间】:2011-08-14 15:54:26
【问题描述】:

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

通过阅读 GNU Make 教程,模式规则似乎可以满足我的需要。 .idl 转换的目标是受 GNU 手册的 Section 10.5.2 中的 bison 示例启发的。我的主要问题是我如何真正触发这些规则?我尝试输入一个 all 目标并引入对 .idls 的依赖,但无济于事。

    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 文件夹中还是放在其他地方以简化清理过程?

【问题讨论】:

    标签: c++ makefile corba idl


    【解决方案1】:

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

    全部:$(patsubst %.idl, %SK.o, $(通配符 *.idl))

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

    IDLS := $(通配符 *.idl) 全部:$(IDLS:%.idl=%SK.o)

    )

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 2016-08-08
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      相关资源
      最近更新 更多