Ответ 1
configure.ac
Что касается библиотеки protobuf, она использует pkg-config
, поэтому лучше всего ссылаться на нее с помощью макроса PKG_CHECK_MODULES
:
PKG_CHECK_MODULES(PROTOBUF, protobuf >= 2.4.0)
AC_SUBST(PROTOBUF_LIBS)
AC_SUBST(PROTOBUF_CFLAGS)
AC_SUBST(PROTOBUF_VERSION)
И проверьте команду protoc
в пути. Здесь очень простая проверка, что она находится на пути:
AC_CHECK_PROG([PROTOC], [protoc], [protoc])
AS_IF([test "x${PROTOC}" == "x"],
[AC_MSG_ERROR([ProtoBuf compiler "protoc" not found.])])
В качестве альтернативы, разрешите пользователю указать другой protoc
с помощью --with-protoc=/path/to/protoc
или с помощью переменной окружения protoc
:
# ProtoBuf compiler.
# First, specify with --with-protoc=/path/of/protoc.
# Or, specify with env variable PROTOC.
# If neither of the above, find it in the path.
#AC_MSG_CHECKING([for ProtoBuf compiler protoc])
AC_ARG_WITH([protoc],
[AS_HELP_STRING([--with-protoc=/path/of/protoc],
[Location of the protocol buffers compiler protoc. Defaults to looking on path.])],
[PROTOC="$withval"],
[ AS_IF([test "x${PROTOC}" == "x"],
[AC_PATH_PROG([PROTOC], [protoc], [no])])
]
)
#AC_MSG_RESULT([${PROTOC}])
AS_IF([test "${PROTOC}" == "no"], [AC_MSG_ERROR([ProtoBuf compiler "protoc" not found.])])
Makefile.am
Добавьте правило для создания файлов proto
:
%.pb.cc %.pb.h: %.proto
$(PROTOC) --proto_path=$(srcdir) --cpp_out=$(builddir) $^
Укажите исходные файлы protobuf с помощью dist_noinst_DATA
. Это необходимо для обеспечения того, чтобы они попадали в файл источника .tar.gz
, созданный с помощью make dist
.
dist_noinst_DATA = whatever.proto
(Примечание: для более новых версий autoconf/automake может быть необходимо использовать @[email protected]
вместо $(builddir)
.)
Укажите сгенерированные файлы с префиксом nodist_
и $(builddir)
path:
nodist_myprog_SOURCES = $(builddir)/whatever.pb.cc $(builddir)/whatever.pb.h
И очистить их с помощью make clean
:
MOSTLYCLEANFILES = whatever.pb.cc whatever.pb.h
Используйте BUILT_SOURCES
для обработки зависимостей для встроенных файлов заголовков:
BUILT_SOURCES = whatever.pb.h
В ваших флагах компилятора может потребоваться обратиться к каталогу сборки, чтобы найти файл заголовка (для работы в сборках VPATH):
AM_CPPFLAGS += -I$(builddir)