Напечатайте что-нибудь после успешного создания в Makefile.am - PullRequest
3 голосов
/ 14 февраля 2011

Я новичок в автоинструментах, и мне удалось создать на данный момент файл configure.ac. Теперь я хотел бы указать где-нибудь (configure.ac, Makefile.am или где-то еще), что после успешного «make» печатается короткая заметка. Что-то вроде «Убедитесь, что вы также указали правильный путь в LD_LIBRARY_PATH».

Однако, когда я указываю это в Makefile.in, выполнение «automake» перезаписывает этот файл (как и ожидалось). Так что я не нашел, как продлить, например, Makefile.am для включения «echo. Убедитесь, что вы также указали правильный путь в LD_LIBRARY_PATH» после завершения компиляции одной из целей. У меня есть только одна цель (bin_PROGRAMS = myprog). Помимо этого, компиляция и т. Д. Работает нормально. Но, как информация для, возможно, «неопытного» опытного пользователя, я действительно хотел бы распечатать последний совет.

Есть ли способ достичь этого?

Спасибо и всего наилучшего.

P.S. Я знаю о cmake и еще не использовал его, и на данный момент я хочу работать с autotools и automake.

Ответы [ 2 ]

7 голосов
/ 14 февраля 2011

---- Редактирование как install-exec-hook полезно, но вот 100% ответ ----

Расширьте свой Makefile, заменив цель "install:" в Makefile.am

Добавьте следующее в «Makefile.am»

install: install-am
        echo "Don't forget to set your LD_LIBRARY_PATH"

Чтобы это работало, вы должны сначала найти цель установки в сгенерированном Makefile и скопировать ее в Makefile.am.Это гарантирует, что вы не нарушите зависимость целей automake друг от друга.

Затем вы добавляете команды под цель так же, как и любой Makefile.Обратите внимание, что это делается в Makefile.am, поэтому, когда automake строит свои файлы Makefile.in и Makefile, он будет использовать вашу цель вместо значений по умолчанию, которые она обычно предоставляет.

Это приблизит ваше "предупреждение" к концуна непараллельных сборках.Опасность заключается в том, что вам нужно будет убедиться, что переопределение цели «install» остается в соответствии с требованиями automake.

Кроме того, если они запускают «make install-exec», ваше предупреждение не будет отправлено.Если вы решите сделать отчет в «make install-exec», то вам следует

  1. удалить настройку отчетов для «make install» (чтобы избежать двойных отчетов).
  2. Добавить настройку отчетов для "make install-exec" (чтобы сообщить о предупреждении о добавлении библиотеки).
  3. Настройка цели install-am для установки данных перед установкой исполняемых файлов.

Пример с удаленной настройкой установки

// note the lack of install: override int Makefile.am
install-exec: install-exec-am
        echo "Be sure to update your LD_LIBRARY_PATH"

install-am: all-am
    @${MAKE} $(AM_MAKEFLAGS) install-data install-exec

---- Исходный пост следует----

Ваш отчет действительно должен быть сделан во время установки.На платформе autotools есть две цели установки: install-data и install-exec.Совместно используемая библиотека должным образом попадает в категорию «exec».

Добавьте install-exec-hook в makefile.am

В основном это будет выглядеть примерно так:

install-exec-hook:
        echo "Be sure to set your LD_LIBRARY_PATH!"

install-data, install-exec, uninstall, dist и distcheck для всех поддерживаемых расширений "-hook".

Что касается гарантии того, что он будет запущен в конце сборки, это немного сложнее,Make / Automake предназначен для параллельной сборки, и это мешает гарантировать, что он будет запущен в конце сборки.

4 голосов
/ 22 февраля 2011

Просто добавьте локальный хук в верхний уровень Makefile.am:

all-local:
        @echo 'Make sure...'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...