2009-09-17 6 views
5

Я создал configure.ac файл вроде этого:Как получить полностью расширенные переменные из конфигурации?

AC_INIT() 
set 

цель это напечатать все доступные переменные среды конфигурационный скрипт создает с помощью set, поэтому я делаю это:

[email protected]:~$ autoconf 
[email protected]:~$ ./configure 

который печатает кучу переменных, таких как

build= 
cache_file=/dev/null 
IFS=' 
' 
LANG=C 
LANGUAGE=C 
datarootdir='${prefix}/share' 
mandir='${datarootdir}/man' 
no_create= 

Пока все хорошо. Проблема заключается в том:

  1. Я хочу, чтобы расширить переменные как ${prefix}/share - но обжигающе все в файл example.sh и выполнение его с помощью Баш не работает, потому что Баш жалуется на изменение только для чтения переменных, как UID и само развертывание тоже не работает.
  2. Я попытался с помощью makefile для этого, где работает расширение, но он жалуется на переводы строк в строках, как в приведенном выше выводе линии IFS=' causes an error message Makefile:24: *** missing separator. Stop.

Кто-нибудь есть идея, как получить полностью укомплектованную версию Configure-х вывод?

+0

Привет! Не могли бы вы объяснить, почему вы хотели бы это сделать? Ваш вопрос звучит так, будто вы пытаетесь решить другую проблему сложным образом. (Например, если вы хотите получить расширенное значение переменной, например '$ datadir', для нее есть более простые способы.) – adl

+0

Я хочу создать шаблоны сценариев оболочки, не зависящие от системы Linux, на которой они работают на , поэтому я может создавать сценарии для настройки сервера и использовать тот же скрипт для второго экземпляра, который нуждается только в модификации нескольких параметров шаблона engine im, используя только поиск/замену переменных сценария для этого мне нужно инициализировать движок всеми переменные или их не заменит –

+0

@adl вы можете объяснить, что такое «легкий» способ справиться с этим. Я также борюсь с этой проблемой –

ответ

6

Руководство Autoconf (я не могу вспомнить или найти, где именно) рекомендует «вручную» сделать такой вид подстановки переменных из в Makefile.in (или .am, если вы решили использовать Automake):

Makefile.in

[...] 
foo.sh: foo.sh.in 
     $(SED) \ 
      -e 's|[@][email protected]|$(prefix)|g' \ 
      -e 's|[@][email protected]|$(exec_prefix)|g' \ 
      -e 's|[@][email protected]|$(bindir)|g' \ 
      -e 's|[@][email protected]|$(datarootdir)|g' \ 
      < "$<" > "[email protected]" 
[...] 

foo.sh.in

#!/bin/sh 
[email protected]@ 
du "$datarootdir" 
+1

Ссылка: http://www.gnu.org/software/automake/manual/html_node/Scripts.html#Scripts – Lekensteyn

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

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