2008-09-18 2 views
2

Я работаю над проектом, который будет распространяться с помощью GNU autoconf/automake, и у меня есть набор сценариев bash, которые вызывают awk-скрипты. Я бы хотел, чтобы скрипты bash попадали в $ PATH, но не в awk-скрипты. Как вставить их в проект? Должны ли они быть добавлены в другие двоичные файлы?Где поставить вспомогательные скрипты с помощью GNU autoconf/automake?

Кроме того, существует ли способ определить окончательное местоположение файла после установки? Я полагаю, что/USR/местные/бен не всегда где исполняемые файлы в конечном итоге ...

ответ

3

Добавить что-то вроде этого, чтобы Makefile.am

scriptsdir = $(prefix)/bin 
scripts_DATA = awkscript1 awkscript2 

В этом случае он будет устанавливать awkscript в $ (префикс)/bin (вы также можете использовать $ (bindir)).

Примечание: не следует забывать, что первое имя должно быть названо именем + dir (scripts -> scriptsdir), а второе должно быть именем + _DATA (scripts -> scripts_DATA).

+9

Augh no. Используйте `pkglibexec_DATA` или` pkglibexec_SCRIPTS`, который будет устанавливать (по умолчанию) на `$ prefix/libexec/$ package`. Вот что такое libexecdir для: http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/3/html/Reference_Guide/s1-filesystem-fhs.html «Каталог libexec/содержит небольшие вспомогательные программы, называемые другими программами ». Это также означает, что если вы находитесь в дистрибутиве, который не нравится libexec, пакетщик может изменить, где эти скрипты идут, передавая `--libexecdir =/usr/lib` для настройки. См. Также http://www.gnu.org/software/automake/manual/automake.html#Uniform – 2012-07-26 21:59:46

+1

В чем разница между `libexec_SCRIPTS` или` libexec_PROGRAMS` и `pkglibexec_SCRIPTS` или` pkglibexec_PROGRAMS`? – CMCDragonkai 2016-11-03 13:30:17

+0

Есть ли какой-то глобальный libexec и специфичный для пакета libexec? Этот глобальный libexec предназначен для выполнения другими программами, но не для пользователей, тогда как пакет libexec предназначен только для программ в вашем пакете? – CMCDragonkai 2016-11-03 13:37:21

0

Если awk-скрипты не войдут в основной каталог bin (префикс/bin), вам необходимо поместить их в соответствующий подкаталог - возможно, из lib, но, возможно, libexec или share (поскольку скрипты awk вероятно, нейтральная платформа).

Исправить: программное обеспечение не обязательно попадет в/usr/local/bin; на моей машине/usr/local/bin управляется MIS, и все программное обеспечение, которое я устанавливаю, попадает под/usr/gnu /. Я использую: ./configure --prefix =/usr/gnu, чтобы установить программное обеспечение там, где я хочу.

Вы можете вставить значение PREFIX в сценарии bash - эффективно, вы «скомпилируете» сценарии, чтобы включить место установки. Помните о проблемах во время тестирования сборки - вам может потребоваться сначала найти сценарии относительно текущего каталога и относительно PREFIX.

+0

Как я могу заставить automake заменить $ {prefix} в сценариях bash? должен ли я сделать им какой-то элемент \ _BIN, в отличие от элемента \ _DATA? – user17925 2008-09-18 19:12:50

1

Джонатан, в ответ на ваш дополнительный вопрос: если вы хотите, чтобы заменить значение префикса во время сборки, вам необходимо:

  1. переименовать скрипт «MyScript» до «myscript.in '
  2. добавить правило configure.ac для его генерации в нижней
  3. использования макроса я сделал под названием AS_AC_EXPAND
  4. использовать его как это:

    AS_AC_EXPAND (BINDIR, $ bindir)

  5. в вашем «myscript.in», теперь вы можете использовать @ BINDIR @, и он будет расширен до полного пути, где скрипт будет установлен.

Обратите внимание, что вы не должны использовать PREFIX непосредственно, любой из каталогов установки потенциально могут быть изменены, так что вы действительно хотите использовать значение, передаваемое настройки для BINDIR и расширить это.

7

Вы можете просто список скриптов, которые вы хотите установить в Makefile.am:

 
bin_SCRIPTS = foo bar 

Это приведет к Foo и бар должен быть установлен во время установки марки. Чтобы получить путь к их окончательному местоположению, вы можете использовать @ bindir @ в foo.in и настроить configure для foo для вас. Например, в configure.переменный ток:

 
AC_CONFIG_FILES([foo bar]) 

, а затем в foo.in:

 
#!/bin/sh 

[email protected]@ 
[email protected][email protected] 
[email protected]@ 
echo bindir = $bindir 

Имейте в виде, что человек конфигурирование может указать любого из --prefix, --exec_prefix или --bindir, и установка может быть перенаправлена ​​с помощью DESTDIR. Используя описанную здесь методику, DESTDIR не будет учитываться, и скрипт будет установлен в другом месте, кроме пути, на который он будет отвечать. Это по дизайну, и это правильное поведение, так как обычно установка DESTDIR используется для создания tarball, который в конечном итоге будет распакован в файловую систему таким образом, что bindir в скрипте станет действительным.

0

Существует несколько советов об этом в Automake manual. Похоже, что предпочтительный подход состоит в том, чтобы сгенерировать скрипты с make-файлом, а не с помощью скрипта configure.

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