Nginx · 자동 스 크 립 트 편 해부 (5) 컴 파 일 러 관련 메 인 스 크 립 트

6789 단어
더 읽 기
Nginx · 자동 스 크 립 트 편 해부 (5) 컴 파 일 러 관련 메 인 스 크 립 트
Author: Poechant
Blog:blog.CSDN.net/Poechant
Email: zhongchao.ustc#gmail.com (#->@)
Date: March 12th, 2012
Copyright © 유 대 · Poechant Nginx 의 자동 스 크 립 트 auto/cc 디 렉 터 리 에 있 는 모든 스 크 립 트 는 컴 파 일 러 관련 설정 에 사 용 됩 니 다.Nginx 의 뛰어난 크로스 플랫폼 성 (Linux, Darwin, Solaris, Win 32 등) 은 이런 스 크 립 트 에 기여 했다.이 디 렉 터 리 에는 다음 스 크 립 트 가 포함 되 어 있 습 니 다.
목차
conf: 메 인 스 크 립 트, 컴 파일 러 의 기본 속성 을 설정 하고 시스템 컴 파일 러 환경 에 따라 서로 다른 스 크 립 트 를 참조 합 니 다.
name: 컴 파 일 러 이름과 관련 된 처리 논 리 는 이 스 크 립 트 에 있 습 니 다.
gcc: GNU C 컴 파 일 러 의 Specified 설정 입 니 다.
sunc: Sun C 컴 파일 러 의 specified 설정 입 니 다.
acc: HP ANSI C + + 컴 파 일 러 의 Specified 설정 입 니 다.
bcc: Borland C + + 컴 파일 러 의 specified 설정 입 니 다.
ccc: Compaq C 컴 파 일 러 의 Specified 설정.
icc: Intel C + + 컴 파 일 러 의 Specified 설정 입 니 다.
msvc: Microsoft Visual C + + 컴 파 일 러 의 Specified 설정.
owc: Open Watcom C 컴 파 일 러 의 Specified 설정 입 니 다.
4.1 LINK 변수LINK 변 수 는:
LINK="\$(CC)"

4.2 컴 파일 옵션 변수
include, 컴 파일, 출력 대상 파일, 출력 실행 가능 한 파일 이 있 습 니 다.
ngx_include_opt="-I "
ngx_compile_opt="-c"
ngx_objout="-o "
ngx_binout="-o "
opt 표시 option, obj 표시 object, bin 표시 binary.
4.3 파일 확장자 변수
대상 파일 확장자, 실행 가능 한 파일 확장자.
ngx_objext="o"
ngx_binext=
ext 표시 extension.
4.4 ngx_long_start 와 ngxlong_end
관련 변 수 는:
ngx_long_start=
ngx_long_end=

이 두 변 수 는 컴 파일 옵션 에서 사용 되 며 플랫폼 과 관련 이 있 습 니 다.여기 서 초기 화 합 니 다.
4.4.1 ngx_long_start
bcc 에서 '@&&| 로 설정
msvc 에서 @<< 로 설정
owc 에서 '' 로 설정
4.4.2 ngx_long_end
bcc 에서 | 로 설정
msvc 에서 << 로 설정
owc 에서 '' 로 설정
4.5 일부 기호의 설정
관련 변 수 는:
ngx_regex_dirsep="\/"
ngx_dirsep='/'
ngx_regex_dirsep: 정규 표현 식 의 디 렉 터 리 구분자 ngx_dirsep: 디 렉 터 리 구분자 dir 표시 directory, sep 표시 seperator, regex 표시 regular expression.
ngx_regex_cont=' \\\
    '
ngx_cont=' \
    '
ngx_tab=' \
        '
ngx_spacer=

ngx_long_regex_cont=$ngx_regex_cont
ngx_long_cont=$ngx_cont

4.6 auto / cc / name 스 크 립 트 참조
. auto/cc/name

4.7 플랫폼 관련 성 설정
if test -n "$CFLAGS"; then
    CC_TEST_FLAGS="$CFLAGS $NGX_CC_OPT"
    case $NGX_CC_NAME in
        ccc)
            # Compaq C V6.5-207
            ngx_include_opt="-I"
        ;;
    esac
else
    case $NGX_CC_NAME in
        gcc)
            # gcc 2.7.2.3, 2.8.1, 2.95.4, egcs-1.1.2
            #     3.0.4, 3.1.1, 3.2.3, 3.3.2, 3.3.3, 3.3.4, 3.4.0, 3.4.2
            #     4.0.0, 4.0.1, 4.1.0
            . auto/cc/gcc
        ;;
        icc)
            # Intel C++ compiler 7.1, 8.0, 8.1
            . auto/cc/icc
        ;;
        sunc)
            # Sun C 5.7 Patch 117837-04 2005/05/11
            . auto/cc/sunc
        ;;
        ccc)
            # Compaq C V6.5-207
            . auto/cc/ccc
        ;;
        acc)
            # aCC: HP ANSI C++ B3910B A.03.55.02
            . auto/cc/acc
        ;;
        msvc*)
            # MSVC++ 6.0 SP2, MSVC++ Toolkit 2003
            . auto/cc/msvc
        ;;
        owc)
            # Open Watcom C 1.0, 1.2
            . auto/cc/owc
        ;;
        bcc)
            # Borland C++ 5.5
            . auto/cc/bcc
        ;;
    esac
    CC_TEST_FLAGS="$CC_TEST_FLAGS $NGX_CC_OPT"
fi

4.8 feature auto/feature 스 크 립 트 는 'Nginx · 자동 스 크 립 트 편 정독 (4) 도구 형 스 크 립 트 시리즈' 에 소개 되 었 습 니 다.그래서 feature 관련 코드 는 이해 하기 쉽다.
if test -n "$NGX_LD_OPT"; then
    ngx_feature=--with-ld-opt=\"$NGX_LD_OPT\"
    ngx_feature_name=
    ngx_feature_run=no
    ngx_feature_incs=
    ngx_feature_path=
    ngx_feature_libs=
    ngx_feature_test=
    . auto/feature

    if [ $ngx_found = no ]; then
        echo $0: error: the invalid value in --with-ld-opt=\"$NGX_LD_OPT\"
        echo
        exit 1
    fi
fi

실행 configure 할 때 --with-ld-opt 지정 NGX_LD_OPT 한 다음 feature 관련 변 수 를 설정 합 니 다.기타 일부 feature 설정 은 다음 과 같다.
4.8.1 gcc 내장 형 원자 작업 관련 기능
ngx_feature="gcc builtin atomic operations"
ngx_feature_name=NGX_HAVE_GCC_ATOMIC
ngx_feature_run=yes
ngx_feature_incs=
ngx_feature_path=
ngx_feature_libs=
ngx_feature_test="long  n = 0;
                  if (!__sync_bool_compare_and_swap(&n, 0, 1))
                      return 1;
                  if (__sync_fetch_and_add(&n, 1) != 1)
                      return 1;
                  if (n != 2)
                      return 1;
                  __sync_synchronize();"
. auto/feature

4.8.2 C99 variadic macros 관련 기능
if [ "$NGX_CC_NAME" = "ccc" ]; then
    echo "checking for C99 variadic macros ... disabled"
else
    ngx_feature="C99 variadic macros"
    ngx_feature_name="NGX_HAVE_C99_VARIADIC_MACROS"
    ngx_feature_run=yes
    ngx_feature_incs="#include 
#define var(dummy, ...)  sprintf(__VA_ARGS__)"
    ngx_feature_path=
    ngx_feature_libs=
    ngx_feature_test="char  buf[30]; buf[0] = '0';
                      var(0, buf, \"%d\", 1);
                      if (buf[0] != '1') return 1"
    . auto/feature
 fi

4.8.3 gcc variadic 매크로 관련 기능
ngx_feature="gcc variadic macros"
ngx_feature_name="NGX_HAVE_GCC_VARIADIC_MACROS"
ngx_feature_run=yes
ngx_feature_incs="#include 
#define var(dummy, args...)  sprintf(args)"
ngx_feature_path=
ngx_feature_libs=
ngx_feature_test="char  buf[30]; buf[0] = '0';
                  var(0, buf, \"%d\", 1);
                  if (buf[0] != '1') return 1"
. auto/feature

4.9 결어
컴 파일 러 관련 설정 의 다른 스 크 립 트 는 세밀 하 게 분석 하지 않 습 니 다. 이것 은 Nginx 의 전체적인 자동 스 크 립 트 시스템 에 대한 학습 이해 에 큰 도움 이 되 지 않 습 니 다.그러나 이런 내용 을 알 고 싶다 면 플랫폼 을 뛰 어 넘 는 소프트웨어 의 자동 스 크 립 트 를 만 드 는 데 도움 이 될 것 입 니 다.서로 다른 시스템 의 기계 에서 아름 다운 configure 과정 을 누 릴 수 있 는 것 은 바로 이 컴 파일 러 와 관련 된 자동 스 크 립 트 가 보장 하 는 것 이다.
-
전재 "유대 의 CSDN 블 로그": blog. csdn. net / Poechant
-

좋은 웹페이지 즐겨찾기