2011-11-22 5 views
1

Как я могу получить automake для установки одной из библиотек до выполнения скриптов проверки?automake install target перед выполнением проверки

Проект создает библиотеку тестирования для одной из библиотек, которые мы динамически загружаем (по вызову dlopen). Проблема в том, что мы не можем переопределить наш путь к библиотеке для тестирования, так как все еще есть множество других библиотек, которые необходимо загрузить (они устанавливаются другими компонентами, которые напрямую не скомпилированы этим make-файлом).

Это сэкономит мне много работы, если я могу просто привести к тому, что некоторая библиотека будет установлена ​​до запуска скриптов проверки. Если я должен поместить его в отдельный make-файл и сначала вызвать его, то в порядке, без проблем. По сути, мне просто нужно запустить make check, чтобы сделать правильную вещь.

+0

Такое поведение заставило бы «make check» сделать очень неправильную вещь. Проверка вашего пакета 'make check' будет вести себя по-разному почти для всех других' make check'. С http://www.gnu.org/prep/standards/html_node/Standard-Targets.html#Standard-Targets: «вы должны написать самотестирование, чтобы они работали, когда программа была построена, но не установлена». –

+0

Это невозможно для этого продукта. Это __needs__ постановка состоит в объединении нескольких зависимых проектов. –

ответ

0

Я не могу найти какой-либо официальный/правильный способ, но, похоже, работает. Добавьте новую зависимость к check и используйте целевой объект для установки, но переопределите, какие библиотеки установлены. Например:

check_dummy: lib_LTLIBRARIES = libdummy.la 
check_dummy: install-libLTLIBRARIES 
check: check_dummy 

Этот GNU уточняйте, я верю.

4

Целевая аудитория должна быть протестирована перед ее установкой. Automake не предлагает этого. Идея состоит в том, что если make check терпит неудачу, вы можете решить не устанавливать пакет вообще. (Кроме того, если вы взломать ваши правила каким-то образом установить во время make check, вы, вероятно, сломать make distcheck.)

Обычный способ использовать местные библиотеки, прежде чем установленные библиотеки является предварять .: к значению LD_LIBRARY_PATH во время тестов. Используя libtool для создания ваших локальных библиотек и ссылки на них, вы будете обрабатывать все эти данные для вас: исполняемые файлы libtool выходы в дереве сборки - это скрипты, которые задают эти переменные перед вызовом правильного exectutable (скрытого в другом месте), чтобы обеспечить их использование локальным библиотеки.

Другое решение, если вы все еще хотите выполнить тесты после установки, не должно использовать make check, но make installcheck. Ожидается, что make installcheck будет запущен только после того, как пользователь выполнит make install. Вам нужно написать собственное правило installcheck-local.

+0

Мы не используем «make install» в качестве нашего окончательного пакета. Мы используем его для подготовки дополнительного пакета, который может быть установлен. 'libtool' также не работает, когда есть несколько проектов automake и глобальных библиотек с различными зависимостями версии. –

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^