2015-08-24 1 views
0

Мне нужно сгенерировать .c и .h из спецификации буфера протокола Google .proto в моей сборке.Как сгенерировать исходный код с помощью внешнего инструмента из самой конфигурации?

В настоящее время я следил за тем, как вручную регистрировать зависимости для моего сгенерированного файла .h. То есть, я добавил несколько:

somefilethatincludesthegenerated.$(OBJEXT): mygenerated.h 

и что вместе с моими правилами строить mygenerated.h и mygenerated.c работ. Я знаю о BUILT_SOURCES, но это работает только для make all не для make mytarget.

Итак, я хотел изучить возможность генерации источников от configure вместо этого, как описано в Automake manual.

AC_CONFIG_FILES позволит мне сгенерировать mygenerated.h с mygenerated.h.in, но реально этот файл не предназначен для создания из шаблона. Файлы должны создаваться с помощью внешнего инструмента под названием protoc. В моем Makefile.am файле правила для создания сгенерированные источников является:

mygenerated.c mygenerated.c: myprotofile.proto 
    $(PROTOC) --proto_path=$(srcdir) --c_out=$(builddir) $^ 

Как можно добиться что-то подобное из самого configure ?. Что я после строить сгенерированные источники всегда, и прежде, чем какой-либо другой цели (BUILT_SOURCES не будет работать для других, чем all, check целей, а также некоторые другие)

+0

Вам нужно будет скомпилировать прото-файл для генерации источников. Взгляните на руководство [protobuf manual] (https://developers.google.com/protocol-buffers/docs/overview). – petersv

+0

Я уже знаю, что, как описано в самом вопросе. Теперь я хочу скомпилировать proto-файл из самого скрипта 'configure', а не компилировать его в' Makefile' – ecerulm

+0

, почему вы хотите скомпилировать код на шаге 'configure'? 'configure' действительно пытается отделить шаги * настройки * и * building *; вы не должны пытаться их смешивать. –

ответ

2

Я suceeded используя AC_CONFIG_COMMANDS вместо AC_CONFIG_FILES.

Так запустить protoc (или protoc-c, как в данном случае) из configure добавить следующее configure.ac:

AC_CONFIG_COMMANDS([src/mygenerated.h], 
        [protoc-c --proto_path=src --c_out=src src/myprotofile.proto]) 

Тогда при запуске ./configure вы увидите

config.status: executing src/mygenerated.h commands 

Обратите внимание, что если вы изменили файл .proto, вам необходимо повторно запустить ./configure. Это является недостатком подхода «генерировать источники из конфигурации».

Смежные вопросы