Config neden değişkenleri argüman olarak alır?


10

İle VAR=value ./configureaynı mı ./configure VAR=value?

İlk durumda, kabuk ortam değişkenini ayarlar ve ikinci durumda configure betiği dizeyi 'VAR=value'bağımsız değişken olarak alır ve muhtemelen değişkeni ayarlar. Configure değişkeniyle başka bir şey yapıp yapamayacağını merak ediyorum (belki bazı değerleri görmezden gelebilir veya filtreleyebilir) ve neden değişkenleri en başta argüman olarak alır?

Yanıtlar:


12

Bu durumda

VAR=value ./configure

bu davranış geçerli kabuğunuza bağlıdır.

./configure VAR=value

davranış configure komut dosyasına bağlıdır. Bazı geliştiriciler ikincisini tercih eder, çünkü birisinin komut dosyasının değişkenlerini sihirli bir şekilde dışarıdan ayarlaması yerine kod içinde değişkenleri ayarlayıp ayarlamayacağını seçmek isterler.

Pratikte çok az fark var çünkü

  • yapılandırma yapan çoğu kişi eski davranışın "işe yaradığı" bir POSIX kabuğundan çalışıyor ve
  • çoğu yapılandırma betiği varolan ortam değişkenlerini belirlemez ve
  • geleneksel ortam değişkenleri (otomobil üreticisinin dışında) köklü kullanıma sahiptir

Örneğin, bash configure betiğinin --helpmesajı şunu gösterir:

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.

ve her durumda, değişkenin her iki şekilde ayarlanması da işe yarar .

Ancak birisinin işleri "iyileştirmeye" karar vermesi durumunda geliştiricinin tercihlerini unutmayın.

Daha fazla okuma:

AC_ARG_VARMakro oa açıklama ve özel bir kullanıma veren komut dosyası için bir bağımsız değişken olarak, belirli bir (ortam) değişken bildirmek için kullanılır. Bu özellik autoconf tarihine nispeten yakın zamanda eklenmiş olsa da, gerçekten önemlidir. En son varlığını yansıtan makronun AS_HELP_STRINGyardımcıya ihtiyacı yoktur ve yalnızca iki parametre alır: değişkenin adı ve ./configure --help sırasında yazdırılan dize:

AC_ARG_VAR(var-name, help-string)

ve uzun süredir devam eden uygulamalar hakkında bir yorum ile devam ediyor:

Varsayılan olarak, config değişkenleri ortamdaki diğer sh komut dosyalarında olduğu gibi alır. Bunların çoğu yok sayılıyor. Olmayanlar bu makro ile bildirilmelidir. Bu şekilde değerli bir değişken olarak işaretlenirler.

Değerli olarak işaretlenen bir değişken Makefile.in dosyasında açık olarak adlandırılmak zorunda kalmadan değiştirilir AC_SUBST, ancak bu tanımın en önemli kısmı değildir. Önemli olan değişkenin önbelleğe alınmasıdır.

  • 7.2 Ayar Çıktı Değişkenler (autoconf belgeler)
    açıklar AC_ARG_VARtekrar geliştirici tercihlerini ifade .:

    Configure betiği başlatıldığında değişkenin değeri, komut satırında değil ortam üzerinden belirtilmiş olması da dahil olmak üzere önbelleğe kaydedilir. Gerçekten de, config './configure CC = bizarre-cc' içindeki CC tanımını fark edebilirken, ne yazık ki çoğu kullanıcının yaptığı 'CC = bizarre-cc ./configure' da bunu fark etmek imkansızdır.


Ayrıca env VAR=value ./configureVAR=value ./configure
şununla
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.