कॉन्फ़िगर चर को तर्क के रूप में क्यों लेता है?


10

के VAR=value ./configureरूप में ही है ./configure VAR=value?

पहले मामले में, शेल पर्यावरण चर सेट करता है और दूसरे में कॉन्फ़िगर स्क्रिप्ट 'VAR=value'एक तर्क के रूप में स्ट्रिंग लेता है, और फिर संभवतः चर सेट करता है। मुझे आश्चर्य है कि यदि कॉन्फ़िगर कुछ और चर के साथ करता है (शायद कुछ मूल्यों को अनदेखा या फ़िल्टर करता है), और यह पहले स्थान पर तर्क के रूप में चर क्यों लेता है।

जवाबों:


12

इस मामले में

VAR=value ./configure

व्यवहार आपके वर्तमान शेल पर निर्भर करता है, जबकि इसमें

./configure VAR=value

व्यवहार कॉन्फ़िगर-स्क्रिप्ट पर निर्भर करता है। कुछ डेवलपर बाद वाले को पसंद करते हैं क्योंकि वे यह चुनना चाहेंगे कि स्क्रिप्ट के भीतर वेरिएबल्स को सेट करना है या नहीं, बजाय किसी ने जादुई रूप से स्क्रिप्ट के वेरिएबल को बाहर से सेट करने के लिए।

व्यवहार में, थोड़ा अंतर है क्योंकि

  • कॉन्फ़िगरेशन कर रहे अधिकांश लोग POSIX शेल से चल रहे हैं, जहां पूर्व व्यवहार "बस काम करता है", और
  • अधिकांश कॉन्फ़िगर स्क्रिप्ट मौजूदा पर्यावरण चर को परेशान नहीं करती हैं, और
  • पारंपरिक पर्यावरण चर (स्वचालित के बाहर) का लंबे समय से स्थापित उपयोग है

उदाहरण के लिए, बैश कॉन्फ़िगर स्क्रिप्ट --helpसंदेश दिखाता है:

Some influential environment variables:
  DEBUGGER_START_FILE
              location of bash debugger initialization file
  CC          C compiler command
  CFLAGS      C compiler flags
  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
              nonstandard directory <lib dir>
  LIBS        libraries to pass to the linker, e.g. -l<library>
  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
              you have headers in a nonstandard directory <include dir>
  CPP         C preprocessor
  YACC        The `Yet Another C Compiler' implementation to use. Defaults to
              the first program found out of: `bison -y', `byacc', `yacc'.
  YFLAGS      The list of arguments that will be passed by default to $YACC.
              This script will default YFLAGS to the empty string to avoid a
              default value of `-d' given by some make applications.

और प्रत्येक मामले में, चर कार्यों को स्थापित करने का तरीका ।

लेकिन डेवलपर की वरीयताओं को ध्यान में रखें, यदि कोई व्यक्ति चीजों को "सुधार" करने का फैसला करता है।

आगे की पढाई:

AC_ARG_VARमैक्रो स्क्रिप्ट के लिए एक तर्क के रूप में एक विशेष (पर्यावरण) चर घोषित करने के लिए, यह एक विवरण और एक विशेष उपयोग देने के लिए किया जाता है। जबकि यह फीचर ऑटोकॉन्फ़ के इतिहास में अपेक्षाकृत हाल ही में जोड़ा गया है , यह वास्तव में महत्वपूर्ण है। इसकी अधिक हालिया उपस्थिति को दर्शाते हुए, मैक्रो को AS_HELP_STRINGसहायक की आवश्यकता नहीं है , और केवल दो मापदंडों को लेता है: चर का नाम और स्ट्रिंग के दौरान मुद्रित। --configure --help:

AC_ARG_VAR(var-name, help-string)

और लंबे समय तक अभ्यास के बारे में एक टिप्पणी के साथ जारी है:

डिफ़ॉल्ट रूप से, किसी भी अन्य स्क्रिप्ट की तरह पर्यावरण से चर उठाता कॉन्फ़िगर करें। उनमें से ज्यादातर को नजरअंदाज कर दिया जाता है। जिन्हें इस मैक्रो के माध्यम से घोषित नहीं किया जाना चाहिए। इस तरह उन्हें एक कीमती चर के रूप में चिह्नित किया जाता है।

स्पष्ट रूप से कॉल किए बिना Makefile.in में कीमती के रूप में चिह्नित एक चर को बदल दिया जाता है AC_SUBST, लेकिन यह परिभाषा का सबसे महत्वपूर्ण हिस्सा नहीं है। क्या महत्वपूर्ण है कि चर कैश किया गया है।

  • 7.2 सेटिंग आउटपुट वेरिएबल्स (ऑटोकॉन्फ प्रलेखन) का
    वर्णन है AC_ARG_VAR, फिर से डेवलपर की वरीयताओं को व्यक्त करना।

    जब लॉन्च किया गया था तब चर का मान कैश में सहेजा जाता है, जिसमें यह निर्दिष्ट नहीं था कि यह कमांड लाइन पर निर्दिष्ट नहीं है, लेकिन पर्यावरण के माध्यम से। दरअसल, कॉन्फ़िगर करते समय CC की परिभाषा './configure CC = bizarre-cc' में देखी जा सकती है, लेकिन 'CC = bizarre-cc/configure' में इसे नोटिस करना असंभव है, जो दुर्भाग्य से, अधिकांश उपयोगकर्ता करते हैं।


आप यह भी वर्णन करने के लिए कैसे कर सकते हैं env VAR=value ./configureसे संबंधित हैVAR=value ./configure
Kusalananda
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.