2009-09-17 8 views
5

J'ai créé un fichier configure.ac comme ceci:Comment obtenir des variables entièrement développées hors de configurer?

AC_INIT() 
set 

le but est d'imprimer toutes les variables de l'environnement disponible le script de configuration crée à l'aide set, donc je fais ceci:

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

qui imprime un tas de variables comme

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

Jusqu'ici tout va bien. Le problème est:

  1. Je veux développer les variables comme ${prefix}/share - mais la tuyauterie tout à un fichier example.sh et l'exécuter en utilisant bash ne fonctionne pas, parce que bash se plaint de la modification de variables en lecture seule comme UID et l'expansion elle-même ne semble pas fonctionner non plus.
  2. J'ai essayé d'utiliser un makefile pour ce où travaille l'expansion, mais il se plaint de nouvelles lignes dans les chaînes, comme dans la sortie au-dessus de la ligne IFS=' causes an error message Makefile:24: *** missing separator. Stop.

Est-ce que quelqu'un a une idée comment obtenir une version complète élargie de configuration de sortie?

+0

Salut! Pourriez-vous expliquer pourquoi vous aimeriez faire cela? Votre question semble être que vous essayez de résoudre un autre problème à la dure. (Par exemple, si vous voulez récupérer la valeur étendue d'une variable telle que '$ datadir', il existe des façons plus simples de le faire.) – adl

+0

Je veux créer des modèles de script shell indépendants du système Linux sur lequel ils s'exécutent donc je peut créer des scripts pour configurer un serveur et utiliser le même script pour une seconde instance qui ne nécessite que la modification de quelques paramètres le moteur de modèle im en utilisant simplement rechercher/remplacer les variables du script pour ce faire j'ai besoin d'initialiser le moteur avec tous les variables ou ils ne seront pas remplacés –

+0

@adl pouvez-vous expliquer quelle est la façon «facile» de faire face à cela. Je suis également aux prises avec ce problème –

Répondre

6

Le manuel Autoconf (je ne me souviens pas ou trouver exactement où) recommande « manuellement » faire une telle sorte de substitution de variables à partir d'un Makefile.in (ou .AM si vous arrive d'utiliser 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

Ref: http://www.gnu.org/software/automake/manual/html_node/Scripts.html#Scripts – Lekensteyn

Questions connexes