Makefile для компиляции .idls - PullRequest
       7

Makefile для компиляции .idls

1 голос
/ 14 августа 2011

Я пишу свой первый Makefile для компиляции некоторых определений CORBA .idl для использования в составе более крупной системы.Я использую программу omniidl от omniORB, которая берет file.idl и создает file.hh и fileSK.cc.Каждый .idl не имеет зависимостей и создается с помощью команды omniidl -bcxx file.idl.

Из прочтения учебника GNU Make кажется, что Pattern Rules будет делать именно то, что мне нужно.Цель преобразования .idl основана на примере bison в Разделе 10.5.2 руководства GNU.Мой главный вопрос: как я могу активировать эти правила?Я попытался поставить цель целиком и ввести зависимость от .idl s, но безрезультатно.

    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 Ответ

3 голосов
/ 15 августа 2011

Зависимости вашей цели all должны быть списком объектных файлов, а не списком файлов idl.Примерно так:

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

(Для ясности вы также можете ввести переменную для хранения списка файлов idl, а затем использовать ссылку подстановки для получения списка объектных файлов:

IDLS := $(wildcard *.idl)

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

)

...