구성이 변수를 인수로 취하는 이유는 무엇입니까?


10

VAR=value ./configure은 동일 ./configure VAR=value?

첫 번째 경우, 쉘은 환경 변수를 설정하고 두 번째 경우에는 configure 스크립트가 문자열 'VAR=value'을 인수로 취한 다음 변수를 설정합니다. configure가 변수를 사용하여 다른 작업을 수행하는지 (일부 값을 무시하거나 필터링 할 수 있는지), 왜 변수를 인수로 사용하는지 궁금합니다.

답변:


12

이 경우

VAR=value ./configure

동작은 현재 쉘에 따라 다릅니다.

./configure VAR=value

동작은 configure-script에 따라 다릅니다. 일부 개발자는 스크립트 변수를 외부에서 마술처럼 설정하지 않고 스크립트 내에서 변수를 설정할지 여부를 선택하기 때문에 후자를 선호합니다.

실제로는 차이가 거의 없습니다

  • 구성을 수행하는 대부분의 사람들은 POSIX 셸에서 실행되며 이전 동작은 "그냥 작동합니다."
  • 대부분의 configure 스크립트는 기존 환경 변수를 설정 해제하지 않으며
  • 기존의 환경 변수 (오토 메이크 외부)는 오랫동안 사용이 설정되어 있습니다.

예를 들어, bash 구성 스크립트의 --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매크로 그것을 설명 및 특정 용도를주는 스크립트를 인수로 특정 (환경) 변수를 선언하기 위해 사용된다. 이 기능은 autoconf의 역사에서 비교적 최근에 추가 되었지만 실제로는 중요합니다. 가장 최근의 존재를 반영하여 매크로에는 AS_HELP_STRING도우미 가 필요하지 않으며 변수 이름과 ./configure --help 중 인쇄 된 문자열의 두 매개 변수 만 사용합니다.

AC_ARG_VAR(var-name, help-string)

오랜 연습에 대한 의견을 계속합니다.

기본적으로 configure는 다른 sh 스크립트와 같이 환경에서 변수를 선택합니다. 그것들의 대부분은 무시됩니다. 이 매크로를 통해 선언되어서는 안됩니다. 이런 식으로 그들은 귀중한 변수로 표시됩니다.

귀중한 것으로 표시된 변수 는 Makefile.in 에서 명시 적을 호출하지 않고 대체AC_SUBST 되지만 정의에서 가장 중요한 부분은 아닙니다. 중요한 것은 변수가 캐시된다는 것입니다.

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

    configure가 시작될 때 variable의 값은 명령 행에 지정되지 않았지만 환경을 통해 지정되는 경우를 포함하여 캐시에 저장됩니다. 실제로 configure는 './configure CC = bizarre-cc'에서 CC의 정의를 알 수 있지만 'CC = bizarre-cc. / configure'에서 CC를 정의하는 것은 불가능합니다. 불행히도 대부분의 사용자가하는 일입니다.


방법 또한 설명 할 수 있습니다 env VAR=value ./configure관련VAR=value ./configure
Kusalananda
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.