VAR=value ./configure
동일 합니까 ./configure VAR=value
?
첫 번째 경우에는 쉘이 환경 변수를 설정하고, 두 번째 경우에는 구성 스크립트가 문자열을 'VAR=value'
인수로 사용하여 변수를 설정할 수도 있습니다. 구성이 변수를 사용하여 다른 작업(특정 값을 무시하거나 필터링하는 등)을 수행하는지, 그리고 처음에 변수를 인수로 사용하는 이유가 무엇인지 궁금합니다.
답변1
이 경우
VAR=value ./configure
동작은 현재 쉘에 따라 다르며 여기서는
./configure VAR=value
동작은 구성 스크립트에 따라 다릅니다. 일부 개발자는 누군가 외부에서 마술처럼 스크립트 변수를 설정하도록 하는 대신 스크립트 내에서 변수를 설정할지 여부를 선택하기를 원하기 때문에 후자를 선호합니다.
사실 그 차이는 아주 작기 때문에
- 구성을 수행하는 대부분의 사람들은 이전 동작이 "그냥 작동"하는 POSIX 셸에서 실행됩니다.
- 대부분의 구성 스크립트는 기존 환경 변수를 설정 해제하지 않으며
- 전통적인 환경 변수(automake 외부)는 오랜 사용 역사를 가지고 있습니다.
예를 들어 --help
bash 구성 스크립트의 메시지는 다음과 같습니다.
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.
각각의 경우에 변수를 설정하는 방법 중 하나는일하다.
그러나 누군가가 무언가를 "개선"하기로 결정한 경우를 대비하여 개발자 기본 설정을 염두에 두십시오.
추가 자료:
- 환경 변수를 autoconf에 전달
./configure
값을 입력하려면 후자(VAR=값)가 필요함을 나타냅니다.config.status
- 3.3. 매개변수로서의 환경변수
AC_ARG_VAL
automake의 관점에서 토론하고 개발자 선호도를 표현합니다.
이
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 사용자에게 해당됩니다. 하다.