How to include .m4 files in Autoconf?

Я видел значительное увеличение производительности от использования EnsureCapacity(int capacity) вызов метода на экземпляре StringBuilder перед использованием его для любого строкового устройства хранения данных. Я обычно называю это на строке кода после инстанцирования. Это имеет тот же эффект, как будто Вы инстанцируете StringBuilder как это:

var sb = new StringBuilder(int capacity);

Этот вызов выделяет необходимую память заранее, которая вызывает меньше выделений памяти приблизительно во время Append() операции. Необходимо высказать образованное предположение на том, в каком количестве памяти Вы будете нуждаться, но для большинства приложений это не должно быть слишком трудно. Я обычно допускаю ошибку на стороне немного слишком много памяти (мы говорим 1k или так).

24
задан petersohn 14 March 2011 в 12:54
поделиться

5 ответов

У меня был точно такой же вопрос, и было труднее найти ответ, чем я думал. Похоже, что AC_CONFIG_MACRO_DIR было тем, что я хотел, но если вы не используете libtoolize, похоже, что AC_CONFIG_MACRO_DIR в настоящее время бесполезен.

Если вы используете automake, я думаю, что ответ выше правильный.

Я не использую automake, поэтому я нашел единственный способ - использовать макрос m4_include, чтобы всасывать каждый файл .m4 по отдельности. Я нашел этот подход здесь:

http://www.flameeyes.eu/autotools-mythbuster/autoconf/macros.html

Надеюсь, это поможет. (Учитывая, как долго работает autoconf, я несколько поражаюсь, что нет встроенного способа просто указать каталог в файле .ac. Похоже, это был бы ужасно распространенный вариант использования. О, хорошо.)

11
ответ дан 28 November 2019 в 22:51
поделиться

Возможно, вы захотите добавить AC_CONFIG_MACRO_DIR в configure.ac в каталог, где находится макрос:

AC_CONFIG_MACRO_DIR([path/to/macros])

Вам также потребуется вызвать макрос где-то в этом файле.

и в Makefile.am вам, вероятно, потребуется настроить ACLOCAL_AMFLAGS (если вы используете automake):

ACLOCAL_AMFLAGS         = -I path/to/macros

Затем вызовите autoreconf -fvi, и вы должны быть настроены.

33
ответ дан 28 November 2019 в 22:51
поделиться

В качестве альтернативы решению Idav1s (которое является абсолютно правильным), вы можете установить макрос в месте, где aclocal найдет его (используйте aclocal --print, чтобы увидеть, где aclocal ищет файлы .m4). ). У каждого подхода есть свои плюсы и минусы. Если вы установите файлы .m4 в $(aclocal --print), вы можете использовать макрос во всех своих проектах, не делая ничего другого. Основным недостатком является то, что каждый разработчик, работающий над проектом, должен будет установить макрос на свое устройство, и это требует от каждого разработчика разумного понимания автоинструментов.

7
ответ дан 28 November 2019 в 22:51
поделиться

У меня тоже есть эта проблема, и я ее только что исправил. Моя среда: CentOS 6.4, M4 1.4.17, autoconf 2.69, libtool 2.4, automake 1.14

Вот шаги, которые я использовал.

add m4 as AC_CONFIG_MACRO_DIR to your configure.ac
rm aclocal.m4  if it exists
mkdir m4       if it does not exist
# copy some dummy files into the folder 
# or some versions of autoconf  won't work   
autoreconf -i --install    
4
ответ дан 28 November 2019 в 22:51
поделиться

Разве недостаточно просто сохранить макрос m4 в определенном каталоге и запустить autoreconf с опцией -I:

autoreconf -i -I/path/to/your/m4/file

Или я вас неправильно понял, и вы хотите интегрировать его? навсегда, без человека, управляющего autoreconf, чтобы беспокоиться о загрузке файла m4?

3
ответ дан 28 November 2019 в 22:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: