У меня возникают проблемы при получении Autotools для обнаружения пользовательских макросов m4
при перестройке проекта.
Я настраиваю проект C, используя Autotools в качестве системы сборки, наряду с Make и gcc в Linux,Я указал пользовательский префикс установки (используя --prefix
), поэтому я ищу там большинство библиотечных зависимостей.Система сборки этого проекта зависит от нескольких пользовательских макросов m4, установленных на ${prefix}/share/aclocal
.Некоторые построены по зависимостям (libgcrypt.m4
), другие я установил сам (ax_pthread.m4
из архива автоконфигурации ).
Это хорошо работает, если я скажу aclocal
гденайти эти макросы.Обычно я делал это, передавая параметр autoreconf в командной строке: --include=/custom/install/prefix/share/aclocal
.Это передается до aclocal
, который может затем найти необходимые макросы m4.
Это работает хорошо, если я не коснусь configure.ac
.На этом этапе Makefile из Autotool перестроит все configure
зависимости, одна из которых предполагает повторный запуск aclocal
.Это происходит без обязательного флага --include
, поэтому происходит сбой.
Вот команда-нарушитель из сгенерированного Autotool Makefile
:
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
Этот вызов aclocal
не знаетисходные параметры командной строки для autoreconf
, поэтому он не может найти необходимые макросы.Позже Autoconf выдает ошибку из-за неправильно сформированного m4, когда он пытается фактически использовать макросы.
Я попытался добавить содержимое prefix
к ACLOCAL_AMFLAGS
в Makefile.am
, но это не удается, потому чтоMakefile передает содержимое ACLOCAL_AMFLAGS
непосредственно в оболочку.В конечном итоге вы получите aclocal -I $(prefix)
или что-то подобное.
Хакерское решение - отредактировать содержимое ACLOCAL
в configure.ac
:
ACLOCAL="ACLOCAL_PATH=$datadir/aclocal $ACLOCAL"
, но это может вызвать проблемыесли пользователь когда-либо решит переопределить ACLOCAL
в командной строке.Это тоже неправильно ...
Более жизнеспособное решение - указать ACLOCAL_PATH
в командной строке перед запуском autoreconf
и make
.
Есть ли идиоматический способвключить m4
скрипты из пользовательского каталога установки?Возможно, есть другой подход ко всей проблеме.