Nginx源码结构和编译配置configure shell
2013-11-05 10:35
465 查看
nginx的优秀不仅体现在程序结构以及代码风格上,并且nginx的源码组织也简洁明了,目录结构层次结构清晰。nginx的源码目录与nginx的模块化以及功能的划分是紧密结合,这也使得我们可以很方便地找到相关功能的代码。
下面首先看下nginx源码的目录:
.
├── auto 自动检测系统环境以及编译相关的脚本
│ ├── cc 关于编译器相关的编译选项的检测脚本
│ ├── lib nginx编译所需要的一些库的检测脚本
│ ├── os 与平台相关的一些系统参数与系统调用相关的检测
│ └── types 与数据类型相关的一些辅助脚本
├── conf 存放默认配置文件,在make install后会拷贝到安装目录中
├── contrib 存放一些实用工具,如geo配置生成工具(geo2nginx.pl)
├── html 存放默认的网页文件(如index/50x.html),在make install后会拷贝到安装目录中
├── man nginx的man手册
└── src 存放nginx的源代码
├── core nginx的核心源代码,包括常用数据结构的定义,以及nginx初始化运行的核心代码如main函数
├── event 对系统事件处理机制的封装,以及定时器的实现相关代码
│ └── modules 不同事件处理方式的模块化,如select、poll、epoll、kqueue等
├── http nginx作为http服务器相关的代码
│ └── modules 包含http的各种功能模块
├── mail nginx作为邮件代理服务器相关的代码
├── misc 一些辅助代码,测试c++头的兼容性,以及对google_perftools的支持
└── os 主要是对各种不同体系统结构所提供的系统函数的封装,对外提供统一的系统调用接口
在nginx根目录下还有变更文档CHANGES和证书LICENSE以及README。还有最重要的configure文件。编译成功之后会生成可执行文件的目录objs。
configure原理:
configure脚本将根据我们输入的选项、系统环境参与来生成所需的文件(包含源文件与Makefile文件)。configure会调用一系列auto脚本来实现编译环境的初始化。下面是configure文件:
shell语言说明:
1、fi与if对称地相对应。esac与case对称地相对应。
2、对于重定向,cat << END >> $NGX_AUTO_CONFIG_H,指的是当遇到字符串“END”时,则把之前的文本重定向追加到$NGX_AUTO_CONFIG_H中去。
本文参考自:http://tengine.taobao.org/book/chapter_09.html
下面首先看下nginx源码的目录:
.
├── auto 自动检测系统环境以及编译相关的脚本
│ ├── cc 关于编译器相关的编译选项的检测脚本
│ ├── lib nginx编译所需要的一些库的检测脚本
│ ├── os 与平台相关的一些系统参数与系统调用相关的检测
│ └── types 与数据类型相关的一些辅助脚本
├── conf 存放默认配置文件,在make install后会拷贝到安装目录中
├── contrib 存放一些实用工具,如geo配置生成工具(geo2nginx.pl)
├── html 存放默认的网页文件(如index/50x.html),在make install后会拷贝到安装目录中
├── man nginx的man手册
└── src 存放nginx的源代码
├── core nginx的核心源代码,包括常用数据结构的定义,以及nginx初始化运行的核心代码如main函数
├── event 对系统事件处理机制的封装,以及定时器的实现相关代码
│ └── modules 不同事件处理方式的模块化,如select、poll、epoll、kqueue等
├── http nginx作为http服务器相关的代码
│ └── modules 包含http的各种功能模块
├── mail nginx作为邮件代理服务器相关的代码
├── misc 一些辅助代码,测试c++头的兼容性,以及对google_perftools的支持
└── os 主要是对各种不同体系统结构所提供的系统函数的封装,对外提供统一的系统调用接口
在nginx根目录下还有变更文档CHANGES和证书LICENSE以及README。还有最重要的configure文件。编译成功之后会生成可执行文件的目录objs。
configure原理:
configure脚本将根据我们输入的选项、系统环境参与来生成所需的文件(包含源文件与Makefile文件)。configure会调用一系列auto脚本来实现编译环境的初始化。下面是configure文件:
#!/bin/sh LC_ALL=C export LC_ALL #其作用是在shell中去除本地化的设置,并对所有子shell这么做。 . auto/options . auto/init . auto/sources #依次交由auto目录下面的option、init、sources来处理 #auto/options主是处理用户输入configure时的附加可选项。然后输出帮助信息。 #auto/init负责初始化一些临时文件的路径,检查echo的兼容性,并创建Makefile文件。 定义不同功能或系统所需要的文件的变量 test -d $NGX_OBJS || mkdir $NGX_OBJS echo > $NGX_AUTO_HEADERS_H echo > $NGX_AUTOCONF_ERR echo "#define NGX_CONFIGURE \"$NGX_CONFIGURE\"" > $NGX_AUTO_CONFIG_H if [ $NGX_DEBUG = YES ]; then have=NGX_DEBUG . auto/have fi # NGX_DEBUG是在auto/options文件中处理的,如果有--with-debug选项,则其值是YES if test -z "$NGX_PLATFORM"; then echo "checking for OS" NGX_SYSTEM=`uname -s 2>/dev/null` NGX_RELEASE=`uname -r 2>/dev/null` NGX_MACHINE=`uname -m 2>/dev/null` echo " + $NGX_SYSTEM $NGX_RELEASE $NGX_MACHINE" NGX_PLATFORM="$NGX_SYSTEM:$NGX_RELEASE:$NGX_MACHINE"; case "$NGX_SYSTEM" in MINGW32_*) NGX_PLATFORM=win32 ;; esac else echo "building for $NGX_PLATFORM" NGX_SYSTEM=$NGX_PLATFORM fi # 检测当前系统信息 . auto/cc/conf # 编译器选项 if [ "$NGX_PLATFORM" != win32 ]; then . auto/headers fi # 头文件加入并测试 . auto/os/conf # 操作系统相关的配置的检测 if [ "$NGX_PLATFORM" != win32 ]; then . auto/unix fi # unix体系操作系统下的通用配置检测 . auto/modules . auto/lib/conf # 检查所需要的第三方库支持 case ".$NGX_PREFIX" in .) NGX_PREFIX=${NGX_PREFIX:-/usr/local/nginx} have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define ;; .!) NGX_PREFIX= ;; *) have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define ;; esac if [ ".$NGX_CONF_PREFIX" != "." ]; then have=NGX_CONF_PREFIX value="\"$NGX_CONF_PREFIX/\"" . auto/define fi have=NGX_SBIN_PATH value="\"$NGX_SBIN_PATH\"" . auto/define have=NGX_CONF_PATH value="\"$NGX_CONF_PATH\"" . auto/define have=NGX_PID_PATH value="\"$NGX_PID_PATH\"" . auto/define have=NGX_LOCK_PATH value="\"$NGX_LOCK_PATH\"" . auto/define have=NGX_ERROR_LOG_PATH value="\"$NGX_ERROR_LOG_PATH\"" . auto/define have=NGX_HTTP_LOG_PATH value="\"$NGX_HTTP_LOG_PATH\"" . auto/define have=NGX_HTTP_CLIENT_TEMP_PATH value="\"$NGX_HTTP_CLIENT_TEMP_PATH\"" . auto/define have=NGX_HTTP_PROXY_TEMP_PATH value="\"$NGX_HTTP_PROXY_TEMP_PATH\"" . auto/define have=NGX_HTTP_FASTCGI_TEMP_PATH value="\"$NGX_HTTP_FASTCGI_TEMP_PATH\"" . auto/define have=NGX_HTTP_UWSGI_TEMP_PATH value="\"$NGX_HTTP_UWSGI_TEMP_PATH\"" . auto/define have=NGX_HTTP_SCGI_TEMP_PATH value="\"$NGX_HTTP_SCGI_TEMP_PATH\"" . auto/define . auto/make # 生成objs/makefile文件 . auto/lib/make # 生成关于库的编译选项到makefile文件 . auto/install # 生成与安装相关的makefile文件内容,并生成最外层的makefile文件 # STUB . auto/stubs have=NGX_USER value="\"$NGX_USER\"" . auto/define have=NGX_GROUP value="\"$NGX_GROUP\"" . auto/define . auto/summary # 汇总信息
shell语言说明:
1、fi与if对称地相对应。esac与case对称地相对应。
2、对于重定向,cat << END >> $NGX_AUTO_CONFIG_H,指的是当遇到字符串“END”时,则把之前的文本重定向追加到$NGX_AUTO_CONFIG_H中去。
本文参考自:http://tengine.taobao.org/book/chapter_09.html
相关文章推荐
- Nginx源码编译安装与负载均衡配置实践
- Linux下软件源码编译安装的configure配置详解
- Linux程序源码编译安装的configure配置详解
- Linux程序源码编译安装的configure配置详解
- Tensorflow源码编译GTX1060 configure配置
- Qt源码编译configure配置参数
- Linux程序源码编译安装的configure配置详解
- Qt源码编译configure配置参数
- 实战Nginx源码编译安装与配置
- Nginx源码编译安装与负载均衡配置实践
- Linux程序源码编译安装的configure配置详解
- 源码编译Nginx服务配置
- Linux程序源码编译安装的configure配置详解
- Nginx源码编译安装及配置文件解读
- NGINX----源码阅读---配置文件解析(由简到杂)
- nginx配置文件结构1
- 【安装oracle——准备工作】配置内核参数+添加用户组及用户+为oracle用户配置shell限制+创建目录结构+设置oracle环境
- nginx源码分析—数组结构ngx_array_t
- 关于在android源码编译时引用第三方jar宝--需要在android.mk中配置
- Centos6.6源码编译Nginx