Mengapa konfigurasi mengambil variabel sebagai argumen?


10

Apakah VAR=value ./configuresama dengan ./configure VAR=value?

Dalam kasus pertama, shell menetapkan variabel lingkungan dan dalam kedua script configure mengambil string 'VAR=value'sebagai argumen, dan kemudian mungkin mengatur variabel. Saya bertanya-tanya apakah configure melakukan hal lain dengan variabel (mungkin mengabaikan atau memfilter beberapa nilai), dan mengapa dibutuhkan variabel sebagai argumen di tempat pertama.

Jawaban:


12

Pada kasus ini

VAR=value ./configure

perilaku tergantung pada shell Anda saat ini, sementara dalam hal ini

./configure VAR=value

perilaku tergantung pada skrip configure. Beberapa pengembang lebih suka yang terakhir karena mereka ingin memilih apakah akan mengatur variabel dalam skrip, daripada meminta seseorang untuk secara ajaib mengatur variabel skrip dari luar.

Dalam praktiknya, ada sedikit perbedaan karena

  • kebanyakan orang melakukan konfigurasi berjalan dari shell POSIX, di mana perilaku sebelumnya "hanya bekerja", dan
  • kebanyakan skrip konfigurasi tidak membatalkan variabel lingkungan yang ada, dan
  • variabel lingkungan konvensional (di luar automake) telah lama digunakan

Misalnya, --helppesan skrip bash configure memperlihatkan ini:

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.

dan dalam setiap kasus, cara pengaturan variabel berfungsi .

Tetapi perlu diingat preferensi pengembang, jika seseorang memutuskan untuk "meningkatkan" hal-hal.

Bacaan lebih lanjut:

The AC_ARG_VARmakro digunakan untuk menyatakan suatu tertentu (lingkungan) variabel sebagai argumen untuk script, memberikan deskripsi dan penggunaan tertentu. Sementara fitur ini telah ditambahkan relatif baru dalam sejarah autoconf , ini sangat penting. Mencerminkan kehadirannya yang lebih baru, makro tidak membutuhkan AS_HELP_STRINGhelper, dan hanya membutuhkan dua parameter: nama variabel dan string yang dicetak selama ./configure --help:

AC_ARG_VAR(var-name, help-string)

dan berlanjut dengan komentar tentang latihan yang sudah berlangsung lama:

Secara default, konfigurasikan mengambil variabel dari lingkungan seperti skrip sh lainnya. Sebagian besar dari mereka diabaikan. Mereka yang tidak harus dinyatakan melalui makro ini. Dengan cara ini mereka ditandai sebagai variabel yang berharga.

Variabel yang ditandai sebagai berharga akan diganti di Makefile.in tanpa harus memanggil eksplisit AC_SUBST, tetapi itu bukan bagian terpenting dari definisi. Yang penting adalah bahwa variabel di-cache.

  • 7.2 Mengatur Variabel Keluaran (dokumentasi autoconf)
    menjelaskan AC_ARG_VAR, lagi-lagi menyatakan preferensi pengembang .:

    Nilai variabel saat konfigurasi diluncurkan disimpan dalam cache, termasuk jika tidak ditentukan pada baris perintah tetapi melalui lingkungan. Memang, sementara configure dapat melihat definisi CC di './configure CC = bizarre-cc', tidak mungkin untuk melihatnya di 'CC = bizarre-cc ./configure', yang, sayangnya, adalah apa yang dilakukan sebagian besar pengguna.


Anda mungkin juga ingin menggambarkan bagaimana env VAR=value ./configurehubungannya denganVAR=value ./configure
Kusalananda
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.