Это более длинное объяснение того, что я предложил в комментарии к ответу Йоргенсена.
Я понимаю, что ваш верхний уровень configure.ac
должен сгенерировать make-файлы из нескольких подпроектов и выполнить необходимые тестытак что вам не нужно запускать configure
в каком-либо подпроекте (подпункт configure
служит только тогда, когда вы хотите работать над этим конкретным подпроектом).
В этом случае вы хотитечтобы избежать дублирования как можно большего количества материала из различных configure.ac
.Я предлагаю вам учитывать весь код подпункта configure
, который также должен выполняться верхним уровнем configure
в макросе m4
.Это включает в себя тесты, объявления AC_SUBSTS
и Makefile
.
Например, использование только одного подпроекта.Вот верхний уровень ./configure.ac
:
AC_INIT([toplevel], [1.0])
AM_INIT_AUTOMAKE([foreign -Werror])
SUB1_COMMON([sub1/]) dnl Stuff from the subproject
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
С ./Makefile.am
:
ACLOCAL_AMFLAGS = -I sub1/m4
SUBDIRS = sub1
Теперь вот sub1/configure.ac
для подпроекта:
AC_INIT([sub1], [1.0])
AM_INIT_AUTOMAKE([foreign -Werror])
AC_CONFIG_MACRO_DIR([m4])
SUB1_COMMON
AC_OUTPUT
С SUB1_COMMON
, определенным в m4/common.m4
:
AC_DEFUN([SUB1_COMMON],
[AC_SUBST([PYTHON3LIB], [`pkg-config --libs python3`])
AC_CONFIG_FILES([$1Makefile])])
И, наконец, sub1/Makefile.am
просто:
ACLOCAL_AMFLAGS = -I m4
# Build something.
...
SUB1_COMMON
содержит весь код, который вы хотитедля совместного использования двух файлов configure.ac
и использования аргумента $1
для соответствующего перемещения файлов конфигурации.В этом примере переменная PYTHON3LIB
будет определена независимо от того, какой configure
был запущен.