Nginx · 자동 스 크 립 트 편 해부 (5) 컴 파 일 러 관련 메 인 스 크 립 트
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
-
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.