回顾变量 CC

最初是在auto/options脚本中初始化的:

  1. CC=${CC:-gcc}

1 C Compiler 的 feature

Windows 平台的编译器叫做MSVC,其他平台的都统称为C Compiler

1.1 获取编译器参数

该脚本并不复杂,首先通过NGX_PLATFORM变量来判断是否是win32(该变量是在auto/options中初始化的),如果是,则:

  1. ngx_feature="C compiler"
  2. ngx_feature_name=
  3. ngx_feature_run=yes
  4. ngx_feature_incs=
  5. ngx_feature_path=
  6. ngx_feature_libs=
  7. ngx_feature_test=
  8. . auto/feature

其中,ngx_feature变量为C compiler,然后初始化其他一些与 feature 相关的变量,再引用auto/feature脚本。

1.2 无法找到编译器则退出

ngx_found表示编译器是否存在,判断ngx_found变量如果是no(该变量是在auto/feature脚本中被置值的),则:

  1. echo
  2. echo $0: error: C compiler $CC is not found
  3. echo
  4. exit 1

即如果编译器不存在,就退出自动脚本运行。

2 根据不同编译器设置名称

2.1 msvc

  1. if `$NGX_WINE $CC -v 2>&1 \
  2. | grep '^Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16' \
  3. >/dev/null 2>&1`; then
  4. NGX_CC_NAME=msvc10
  5. echo " + using Microsoft Visual C++ 10 compiler"
  6. else if `$NGX_WINE $CC -v 2>&1 \
  7. | grep '^Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14' \
  8. >/dev/null 2>&1`; then
  9. NGX_CC_NAME=msvc8
  10. echo " + using Microsoft Visual C++ 8 compiler"
  11. else if `$NGX_WINE $CC -v 2>&1 \
  12. | grep '^Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13' \
  13. >/dev/null 2>&1`; then
  14. NGX_CC_NAME=msvc7
  15. echo " + using Microsoft Visual C++ 7 compiler"
  16. else
  17. NGX_CC_NAME=msvc
  18. echo " + using Microsoft Visual C++ compiler"
  19. fi
  20. fi
  21. fi

2.2 owc

  1. else
  2. if [ "$CC" = wcl386 ]; then
  3. NGX_CC_NAME=owc
  4. echo " + using Open Watcom C compiler"

2.3 bcc

  1. else
  2. if [ "$CC" = bcc32 ]; then
  3. NGX_CC_NAME=bcc
  4. echo " + using Borland C++ compiler"

2.4 gcc

  1. else
  2. if `$CC -v 2>&1 | grep 'gcc version' >/dev/null 2>&1`; then
  3. NGX_CC_NAME=gcc
  4. echo " + using GNU C compiler"

2.5 icc

  1. else
  2. if `$CC -V 2>&1 | grep '^Intel(R) C' >/dev/null 2>&1`; then
  3. NGX_CC_NAME=icc
  4. echo " + using Intel C++ compiler"

2.6 sunc

  1. else
  2. if `$CC -V 2>&1 | grep 'Sun C' >/dev/null 2>&1`; then
  3. NGX_CC_NAME=sunc
  4. echo " + using Sun C compiler"

2.7 ccc

  1. else
  2. if `$CC -V 2>&1 | grep '^Compaq C' >/dev/null 2>&1`; then
  3. NGX_CC_NAME=ccc
  4. echo " + using Compaq C compiler"

2.8 acc

  1. else
  2. if `$CC -V 2>&1 | grep '^aCC: ' >/dev/null 2>&1`; then
  3. NGX_CC_NAME=acc
  4. echo " + using HP aC++ compiler"

2.9 Unknown

  1. else
  2. NGX_CC_NAME=unknown

解剖Nginx·自动脚本篇(6)编译器名称变量脚本 auto/cc/name的更多相关文章

  1. 解剖Nginx·自动脚本篇(5)编译器相关主脚本

    在 Nginx 的自动脚本中,auto/cc目录下的所有脚本都是用于编译器相关配置使用的.Nginx的出色跨平台性(Linux.Darwin.Solaris.Win32 等)就有这些脚本的贡献.该目录 ...

  2. 解剖Nginx·自动脚本篇(4)工具型脚本系列

    目录 auto/have 向自动配置头文件追加可用宏定义(objs/ngx_auto_config.h) auto/nohave 向自动配置头文件追加不可用宏定义(objs/ngx_auto_conf ...

  3. 解剖Nginx·自动脚本篇(3)源码相关变量脚本 auto/sources

    在configure脚本中,运行完auto/options和auto/init脚本后,接下来就运行auto/soures脚本.这个脚本是为编译做准备的. 目录 核心模块 事件模块 OpenSSL 模块 ...

  4. 解剖Nginx·自动脚本篇(2)设置初始变量脚本 auto/init

    在configure中运行完auto/options脚本后,接着运行auto/init脚本,其中所做的工作如下. 1 Makefile文件名变量 默认情况下是: objs/Makefile 代码如下: ...

  5. 解剖Nginx·自动脚本篇(1)解析配置选项脚本 auto/options

    在安装Nginx之前(即运行make脚本之前),首先是进行安装的配置准备,包括环境检查及生成文件.这些工作是由自动脚本完成的.和绝大多数软件一样,Nginx的自动脚本的入口,同样是名为configur ...

  6. 解剖Nginx·自动脚本篇(7)类型相关脚本系列

    1 auto/types/sizeof 该脚本的功能,是通过测试程序获知给定的ngx_type的大小. 1.1 显示提示信息 echo $ngx_n "checking for $ngx_t ...

  7. 解剖Nginx·模块开发篇(4)模块开发中的命名规则和模块加载与运行流程

    1 命名规则 1.1 基本变量 基本变量有三个: ngx_module_t 类型的 ngx_http_foo_bar_module: ngx_command_t 类型的数组 ngx_http_foo_ ...

  8. 解剖Nginx·模块开发篇(1)跑起你的 Hello World 模块!

    1 学习 Nginx 模块开发需要有哪些准备? 需要的预备知识不多,有如下几点: 有过一些 C 语言的编程经历: 知道 Nginx 是干嘛的,并有过编写或改写 Nginx 的配置文件的经历. OK,就 ...

  9. 解剖Nginx·模块开发篇(5)解读内置非默认模块 ngx_http_stub_status_module

    1 Background ngx_http_stub_status_module 是一个 Nginx 的内置 HTTP 模块,该模块可以提供 Nginx 的状态信息.默认情况下这个模块是不被编译进来的 ...

随机推荐

  1. 使用distillery 实现版本的动态升级&& 动态降级

    备注: distillery  使用很棒的elixir 打包构建工具,下面演示的是升级以及降级   1. 参考项目 https://github.com/rongfengliang/phoenix-r ...

  2. SQL 中nvarchar和varchar到底能存多少汉字和英文

    实践出真知,在SQL中,nvarchar(50)表示汉字和英文都是50,varchar(50)汉字25,英文50

  3. linux tcpdump命令抓包

    tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) 截获主机210.27.48.1 和主机210.27.48.2 或210.27 ...

  4. jeecg中树形显示的用法

    1.GoodsController中显示的方法如下: @RequestMapping(params = "goodsgrid") @ResponseBody public Obje ...

  5. java代码---------实现File的目录下创建文本文档

    总结:虽然他没教给我们很多,但是他已经很棒了 package com.a.b; import java.io.*; public class dd { public static void main( ...

  6. windows 我永远的最爱

    我配置好这个真不容易.总结下,配置中没搞清楚发布远程日志网址的意思:每一个博客配置都不同,比如新浪.网易.51技术博客

  7. Thread之五:线程的优先级

    Java线程可以有优先级的设定,高优先级的线程比低优先级的线程有更高的几率得到执行(不完全正确,请参考下面的“线程优先级的问题“). 记住当线程的优先级没有指定时,所有线程都携带普通优先级. 优先级可 ...

  8. HBase之八--(2):HBase二级索引之Phoenix

    1. 介绍 Phoenix 是 Salesforce.com 开源的一个 Java 中间件,可以让开发者在Apache HBase 上执行 SQL 查询.Phoenix完全使用Java编写,代码位于 ...

  9. Java-Runoob-面向对象:Java 抽象类

    ylbtech-Java-Runoob-面向对象:Java 抽象类 1.返回顶部 1. Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的 ...

  10. Java字符代码中干掉制表符、回车符和换行符

    Java字符代码中干掉制表符.回车符和换行符 代码片段: String sql = StringUtils.trim(sql).replaceAll("[\\r\\n\\t]",& ...