2009-09-17 22 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.

किसी को कॉन्फ़िगर करने के एक पूरी तरह से विस्तृत संस्करण प्राप्त करने के एक विचार है शिकायत उत्पादन?

+0

हाय! क्या आप समझा सकते हैं कि आप ऐसा क्यों करना चाहते हैं? आपका प्रश्न लगता है जैसे आप किसी अन्य समस्या को हल करने की कोशिश कर रहे हैं। (उदाहरण के लिए यदि आप '$ डेटादाइर' जैसे चर के विस्तारित मान को पुनर्प्राप्त करना चाहते हैं, तो इसके लिए आसान तरीके हैं।) – adl

+0

मैं पर चल रहे लिनक्स सिस्टम से स्वतंत्र शैल स्क्रिप्ट टेम्पलेट्स बनाना चाहता हूं, इसलिए मैं एक सर्वर स्थापित करने के लिए स्क्रिप्ट बना सकते हैं और एक दूसरे स्क्रिप्ट के लिए एक ही स्क्रिप्ट का उपयोग कर सकते हैं, जिसमें केवल कुछ पैरामीटर के संशोधन की आवश्यकता होती है टेम्पलेट इंजन आईएम केवल स्क्रिप्ट के चरों को खोजने/प्रतिस्थापित करने के लिए का उपयोग करके मुझे इंजन को प्रारंभ करने की आवश्यकता है वेरिएबल्स या वे –

+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

संबंधित मुद्दे