허용 변수를 매개변수로 구성하는 이유는 무엇입니까?

허용 변수를 매개변수로 구성하는 이유는 무엇입니까?

VAR=value ./configure동일 합니까 ./configure VAR=value?

첫 번째 경우에는 쉘이 환경 변수를 설정하고, 두 번째 경우에는 구성 스크립트가 문자열을 'VAR=value'인수로 사용하여 변수를 설정할 수도 있습니다. 구성이 변수를 사용하여 다른 작업(특정 값을 무시하거나 필터링하는 등)을 수행하는지, 그리고 처음에 변수를 인수로 사용하는 이유가 무엇인지 궁금합니다.

답변1

이 경우

VAR=value ./configure

동작은 현재 쉘에 따라 다르며 여기서는

./configure VAR=value

동작은 구성 스크립트에 따라 다릅니다. 일부 개발자는 누군가 외부에서 마술처럼 스크립트 변수를 설정하도록 하는 대신 스크립트 내에서 변수를 설정할지 여부를 선택하기를 원하기 때문에 후자를 선호합니다.

사실 그 차이는 아주 작기 때문에

  • 구성을 수행하는 대부분의 사람들은 이전 동작이 "그냥 작동"하는 POSIX 셸에서 실행됩니다.
  • 대부분의 구성 스크립트는 기존 환경 변수를 설정 해제하지 않으며
  • 전통적인 환경 변수(automake 외부)는 오랜 사용 역사를 가지고 있습니다.

예를 들어 --helpbash 구성 스크립트의 메시지는 다음과 같습니다.

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매크로는 특정(환경) 변수를 스크립트에 대한 인수로 선언하여 설명과 특정 목적을 제공하는 데 사용됩니다. 이 기능이 적용되었지만최근에 autoconf 기록이 추가되었습니다., 이것은 정말 중요합니다. 이 매크로에는 도우미가 필요하지 않으며 AS_HELP_STRING변수 이름과 최근 발생을 반영하는 ./configure --help 중에 인쇄된 문자열이라는 두 개의 인수만 필요합니다.

AC_ARG_VAR(var-name, help-string)

그리고 오랜 연습에 대해 계속해서 논평합니다.

기본적으로 구성은 다른 sh 스크립트와 마찬가지로 환경에서 변수를 가져옵니다. 대부분은 무시됩니다. 그렇지 않은 것들은 이 매크로를 통해 선언되어야 합니다. 이런 식으로 그들은 귀중한 변수로 표시됩니다.

귀중한 get으로 표시된 변수Makefile.in에서 바꾸기명시적 을 호출할 필요는 없지만 AC_SUBST정의에서 가장 중요한 부분은 아닙니다. 중요한 것은 변수가 캐시된다는 것입니다.

  • 7.2 출력 변수 설정(autoconf 문서)는 개발자 선호도를 다시 표현하여
    설명합니다 .AC_ARG_VAR

    변수 값은 명령줄이 아니라 환경을 통해 지정된 경우를 포함하여 구성이 시작될 때 캐시에 저장됩니다. 실제로 구성은 './configure CC=bizarre-cc'에서 CC의 정의를 확인할 수 있지만 'CC=bizarre-cc ./configure'에서는 이를 확인할 수 없습니다. 이는 불행하게도 대부분의 What 사용자에게 해당됩니다. 하다.

관련 정보