Куда поместить вспомогательные скрипты с GNU autoconf / automake?

StackOverflow https://stackoverflow.com/questions/94161

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

Примечание:Не забывайте, что первое должно быть названо name + dir (scripts -> scriptssdir), а второе должно быть name + _DATA (scripts -> scripts_DATA).

Другие советы

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

bin_SCRIPTS = foo bar

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

AC_CONFIG_FILES([foo bar])

а затем в foo.in:

#!/bin/sh

prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
echo bindir = $bindir

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

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

  1. переименуйте свой скрипт 'myscript' в 'myscript.in'
  2. добавьте правило в configure.ac, чтобы сгенерировать его внизу
  3. используйте созданный мной макрос под названием AS_AC_EXPAND КАК_АК_РАСШИРИТЬ
  4. используйте это следующим образом:

    AS_AC_EXPAND(BINDIR, $bindir)

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

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

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

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

Вы можете встроить значение PREFIX в скрипты bash - фактически, вы будете "компилировать" скрипты, чтобы включить местоположение установки.Помните о проблемах во время тестирования сборки - возможно, вам потребуется сначала найти скрипты относительно текущего каталога, а относительно ПРЕФИКСА - позже.

Есть несколько советов по этому поводу в Руководство по автоматическому изготовлению.Похоже, что предпочтительным подходом является генерация скриптов с помощью makefile, а не с помощью скрипта configure.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top