Tại sao cấu hình lấy biến làm đối số?


10

VAR=value ./configuregiống như ./configure VAR=value?

Trong trường hợp đầu tiên, shell đặt biến môi trường và trong lần thứ hai, script script sẽ lấy chuỗi 'VAR=value'làm đối số và sau đó có thể đặt biến. Tôi tự hỏi nếu cấu hình làm bất cứ điều gì khác với biến (có thể bỏ qua hoặc lọc một số giá trị) và tại sao nó lại lấy biến làm đối số ở vị trí đầu tiên.

Câu trả lời:


12

Trong trường hợp này

VAR=value ./configure

hành vi phụ thuộc vào vỏ hiện tại của bạn, trong khi trong này

./configure VAR=value

hành vi phụ thuộc vào tập lệnh configure. Một số nhà phát triển thích cái sau bởi vì họ muốn chọn có đặt các biến trong tập lệnh hay không, thay vì có ai đó đặt các biến của tập lệnh một cách kỳ diệu từ bên ngoài.

Trong thực tế, có rất ít sự khác biệt bởi vì

  • hầu hết mọi người thực hiện cấu hình đang chạy từ trình bao POSIX, trong đó hành vi trước đây "chỉ hoạt động" và
  • hầu hết các tập lệnh cấu hình không bỏ đặt các biến môi trường hiện có và
  • các biến môi trường thông thường (bên ngoài tự động) có cách sử dụng lâu dài

Ví dụ, --helpthông báo của tập lệnh cấu hình bash hiển thị điều này:

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.

và trong mỗi trường hợp, một trong hai cách thiết lập biến hoạt động .

Nhưng hãy ghi nhớ sở thích của nhà phát triển, trong trường hợp ai đó quyết định "cải thiện" mọi thứ.

Đọc thêm:

Các AC_ARG_VARvĩ mô được sử dụng để khai báo một (môi trường) biến đặc biệt như một đối số cho kịch bản, cho nó một mô tả và một sử dụng cụ thể. Mặc dù tính năng này đã được thêm vào tương đối gần đây trong lịch sử của autoconf , nhưng nó thực sự quan trọng. Phản ánh sự hiện diện gần đây của nó, macro không cần trình AS_HELP_STRINGtrợ giúp và chỉ nhận hai tham số: tên của biến và chuỗi được in trong ./cool --help:

AC_ARG_VAR(var-name, help-string)

và tiếp tục với một nhận xét về thực hành lâu dài:

Theo mặc định, cấu hình chọn các biến từ môi trường như bất kỳ tập lệnh sh nào khác. Hầu hết những người bị bỏ qua. Những cái không nên được khai báo thông qua macro này. Bằng cách này, chúng được đánh dấu là một biến quý.

Một biến được đánh dấu là quý được thay thế trong Makefile.in mà không phải gọi một từ rõ ràng AC_SUBST, nhưng đó không phải là phần quan trọng nhất của định nghĩa. Điều quan trọng là biến được lưu trữ.

  • 7.2 Thiết lập các biến đầu ra (tài liệu autoconf)
    mô tả AC_ARG_VAR, một lần nữa thể hiện sở thích của nhà phát triển.:

    Giá trị của biến khi khởi chạy cấu hình được lưu trong bộ đệm, bao gồm cả nếu nó không được chỉ định trên dòng lệnh mà thông qua môi trường. Thật vậy, trong khi cấu hình có thể nhận thấy định nghĩa của CC trong './mình CC = bizarre-cc', không thể nhận thấy nó trong 'CC = bizarre-cc ./cool', điều không may là hầu hết người dùng làm.


Bạn cũng có thể muốn mô tả mức độ env VAR=value ./configureliên quan đếnVAR=value ./configure
Kusalananda
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.