`
Poechant
  • 浏览: 229558 次
博客专栏
Bebe66e7-3a30-3fc9-aeea-cfa3b474b591
Nginx高性能Web服务...
浏览量:24324
5738817b-23a1-3a32-86de-632d7da73b1e
Cumulus实时媒体服务...
浏览量:22104
社区版块
存档分类
最新评论

解剖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、Win32 等)就有这些脚本的贡献。该目录下包含如下脚本:

目录

  • 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表示optionobj表示objectbin表示binary

4.3 文件扩展名变量

目标文件扩展名、可执行文件扩展名。

ngx_objext="o"
ngx_binext=

ext表示extension

4.4 ngx_long_start 和 ngx_long_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表示directorysep表示seperatorregex表示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 builtin atomic operations 相关 feature

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 相关 feature

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 <stdio.h>
#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 macros 相关 feature

ngx_feature="gcc variadic macros"
ngx_feature_name="NGX_HAVE_GCC_VARIADIC_MACROS"
ngx_feature_run=yes
ngx_feature_incs="#include <stdio.h>
#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

-

分享到:
评论

相关推荐

    nginx一键安装包含自动安装脚本

    **Nginx 一键安装与自动化脚本** 在IT行业中,服务器配置和管理是一项重要的任务,尤其是在处理Web服务时。Nginx是一款高性能的HTTP和反向代理服务器,以其高效、稳定和轻量级的特性而广受欢迎。本文将详细讨论如何...

    ubuntu自动安装nginx php脚本

    ubuntu自动安装nginx php脚本ubuntu自动安装nginx php脚本

    window下nginx启动脚本

    nginx配置修改后运行此脚本启动nginx。 其脚本的作用往往是简化了启动的便利

    nginx 自动化安装脚本

    nginx 自动化安装脚本,下载直接运行安装就可以,还集成了限制国家ip模块

    nginx自动化安装shell脚本

    nginx自动化安装shell脚本

    Centos7系统自动安装nginx脚本

    Centos7系统自动安装nginx脚本, 由于每次安装新的环境如果需要 Nginx 的话都需要进行一次手动安装,为了减轻重复工作,书写自动安装 Nginx 安装脚本

    一键安装Nginx脚本+源码

    `install_nginx-v2.sh` 脚本通常是为了简化 Nginx 的安装过程而编写的,它会自动完成下载、编译、配置和安装等步骤。这种自动化方式对于初学者或者需要快速部署环境的开发者来说非常方便,减少了手动操作的复杂性和...

    nginx 启动脚本

    这篇博客将深入探讨Nginx的启动脚本,了解其工作原理以及如何自定义和管理这些脚本。 【描述】:虽然没有提供具体的描述,但可以推测博客可能涉及了Nginx启动脚本的创建、使用和自定义过程。通常,Nginx的启动脚本...

    windows启动nginx.bat脚本

    windows启动nginx脚本

    linux安装nginx一键脚本(自己用过)

    linux安装nginx一键脚本(自己用过,完美可用),这个文件是nginx.sh,可以在linux的小黑框中,先上传到服务器自己想安装的目录,然后找到找到这个目录再找到这个文件,执行sh nginx.sh即可自动安装。

    Nginx日志自动归档备份shell脚本log.sh

    Nginx日志自动归档备份shell脚本log

    nginx添加站点脚本

    Nginx通过配置不同的站点来管理多个网站的运行,而“添加站点脚本”就是一种自动化创建和管理Nginx站点配置的工具。下面我们将深入探讨Nginx站点脚本的工作原理以及如何使用它。 ### 1. Nginx的基本概念 Nginx是一...

    Linux自动化脚本安装Nginx使用说明

    在这个压缩包文件"nginx-自动化部署"中,可能包含了这个自动化脚本以及相关的文档说明。文档可能详细解释了脚本的工作原理,以及如何根据特定环境进行调整。务必仔细阅读文档,理解每个步骤的目的和脚本中的变量含义...

    检测网站状态网站挂了自动重启nginx服务脚本 运行多年无人值守

    检测网站状态并自动重启Nginx服务的脚本通常用于服务器管理中,当网站不可访问时(比如网页加载超时或者返回错误码),该脚本可以定期检查网站的响应情况。这个过程一般包含以下几个步骤: 1. **监控脚本**:编写一...

    nginx_nginx安装脚本_

    1. **自动化流程**:手动安装Nginx涉及多个步骤,包括下载源码、编译、配置等,而脚本可以自动化这些过程,节省时间和减少出错可能性。 2. **简化复杂性**:对于不熟悉Linux系统或Nginx配置的用户,安装脚本提供了一...

    自动化脚本一键生成Nginx https证书证书格式为pem

    5. **配置Nginx**:在Nginx配置文件中,指定证书和私钥的路径,如下所示: ``` server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/server.crt; ssl_certificate_key /path/to/...

    Nginx脚本

    **Nginx脚本详解** Nginx,作为一款高性能的HTTP和反向代理服务器,以其轻量级、高并发的特性在Web服务领域广泛应用。它不仅能够处理静态内容,还可以通过配置执行一些动态处理任务,例如使用脚本来实现自定义逻辑...

    自动化部署Nginx Shell脚本

    以下是使用Shell脚本自动化部署Nginx的基本步骤: 1. **环境准备**:确保服务器上已经安装了必要的基础工具,如GCC编译器、Make工具等,这些通常包含在开发工具包中(如在Ubuntu上使用`sudo apt-get install build-...

    nginx自动安装

    本教程将详细介绍如何在Linux系统上通过自动化脚本来快速安装Nginx,旨在简化传统手动安装过程,提高效率。 一、Nginx简介 Nginx(发音为"engine x")是一款反向代理、负载均衡器以及HTTP缓存服务器,以其事件驱动...

    nginx一键安装脚本

    nginx一键安装脚本

Global site tag (gtag.js) - Google Analytics