2009-09-17 5 views
5

habe ich eine configure.ac-Datei wie folgt:Wie erhalten Sie vollständig erweiterte Variablen aus der Konfiguration?

AC_INIT() 
set 

der Zweck ist, alle verfügbaren Umgebungsvariable configure mit set erstellt zu drucken, so dass ich dies tun:

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

die druckt eine Reihe von Variablen wie

So weit so gut. Das Problem ist:

  1. I die Variablen wie ${prefix}/share erweitern wollen - aber kochend alles in eine Datei example.sh und Ausführen es bash mit nicht funktioniert, weil bash beschwert sich über Lesevariablen wie UID Modifizieren und Expansion selbst scheint auch nicht zu funktionieren.
  2. Ich versuchte, ein makefile dafür verwendet, wo Expansion funktioniert, aber es beschwert sich über Zeilenumbrüche in Strings, wie in der obigen Ausgabe die Zeile IFS=' causes an error message Makefile:24: *** missing separator. Stop.

jemand eine Idee Hat, wie eine vollständig erweiterte Version von configure die bekommen Ausgabe?

+0

Hallo! Können Sie erklären, warum Sie das gerne tun würden? Ihre Frage klingt wie Sie versuchen, ein anderes Problem auf die harte Art zu lösen. (Zum Beispiel, wenn Sie den erweiterten Wert einer Variablen wie '$ datadir' abrufen möchten, gibt es einfachere Möglichkeiten.) – adl

+0

Ich möchte Shell-Skript-Vorlagen erstellen, die unabhängig von dem Linux-System sind, auf dem sie laufen , also ich kann Skripte für die Einrichtung eines Servers erstellen und das gleiche Skript für eine zweite Instanz verwenden, die nur einige Parameter geändert werden müssen die Vorlage-Engine ich benutze nur Suche/Ersetzung der Variablen des Skripts um dies zu tun, muss ich die Engine mit allen initialisieren die Variablen oder sie werden nicht ersetzt –

+0

@adl können Sie erklären, was ist der "einfache" Weg, damit umzugehen. Ich kämpfe auch mit diesem Problem –

Antwort

6

Das Autoconf Handbuch (Ich kann mich nicht daran erinnern, oder wo genau) empfiehlt „von Hand“ zu tun, eine solche Art von Variablensubstitution innerhalb eines Makefile.in (oder .am wenn Sie verwenden Automake- passieren):

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

Verwandte Themen