#makefile #autotools #automake
Вопрос:
Я создаю библиотеку (с использованием Autotools), которая выглядит следующим образом. Создание библиотеки работает нормально, когда я добавляю файл *.cpp в libmytest_la_SOURCES
.
lib_LTLIBRARIES = libmytest.la libmytest_la_SOURCES = test.capnp.c libmytest_la_CXXFLAGS = -I/usr/include -I$(top_srcdir)/src/includes libmytest_la_LDFLAGS = -version-info 0:0:0 -L/usr/lib64 libmytest_la_LIBADD = -lcapnp
Проблема в том, что мне нужно вызвать сторонний компилятор для генерации кода перед выполнением обычного процесса компиляции. Следующий capnp
инструмент создаст выходной файл c с именем test.capnp.c
.
capnp compile -oc test.capnp
И если я подключу вывод этого ( test.capnp.c
) в файл makefile выше, моя библиотека будет построена. Чего я не понимаю, так это как вызвать эту команду в файле Makefile.я должен сгенерировать необходимый исходный файл и подключить его к libmytest_la_SOURCES
переменной.
Есть какие-нибудь мысли?
Ответ №1:
Automake не имеет прямой поддержки capnp
, и добавление поддержки нового языка или инструмента повлечет за собой взлом программы. Но вы можете указать обычные make
правила в своем Makefile.am
файле, и они будут перенесены в конечный сгенерированный Makefile
файл . Это основная точка расширения Automake.
Таким образом, вы можете добавить это в свой файл Makefile:
test.capnp.c : test.capnp capnp compile -oc $lt; # or # $(CAPNP) compile -oc $lt; # where $(CAPNP) is the capnp binary as discovered by configure
Вы также хотели бы указать test.capnp
в качестве дополнительного файла для распространения:
EXTRA_DIST = test.capnp
Вам также следует подумать о том, хотите ли вы, чтобы файл .c был включен в пакеты распространения, чтобы уменьшить зависимость от времени сборки capnp
. Если нет, то вместо того , чтобы включать его в список libmytest_la_SOURCES
, вы должны включить его в список nodist_libmytest_la_SOURCES
, а также в CLEANFILES
:
# # test.capnp.c is a built file that we choose not to distribute # nodist_libmytest_la_SOURCES = test.capnp.c CLEANFILES = test.capnp.c # or: CLEANFILES = $(nodist_libmytest_la_SOURCES)