Nginx源碼分析之---auto/init腳本

微信公衆號:鄭爾多斯
關注可瞭解更多的Nginx知識。任何問題或建議,請公衆號留言;
關注公衆號,有趣有內涵的文章第一時間送達!nginx

回顧

上一篇文章咱們詳細的講解了auto/option文件,該文件主要是爲了初始化傳遞給configure的命令參數。本文繼續講解configure腳本調用的第二個文件auto/initweb

auto/init

這個腳本主要是進行一些變量的初始化工做,爲後續的Makefile文件進行準備工做。
在分析auto/init腳本以前,先要認識一個變量NGX_OBJS,這個變量是在auto/options文件中進行賦值的,它的做用:用於保存編譯相關的文件。bash

1NGX_OBJS=objs // 默認的值是objs
複製代碼

auto/optionsfor循環中,對該變量進行了再次賦值,咱們將這部分代碼摘出來,以下:微信

1case "$option" in
2    --builddir=*)           NGX_OBJS="$value"  ;;
3esac
複製代碼

也就是說,咱們能夠在執行configure命令的時候經過指定--builddir=path的方式將該變量的值設置爲咱們自定義的path
下面咱們接着分析auto/init腳本,功能以下:
一、設置Makefile文件路徑,默認爲objs/Makefileapp

1NGX_MAKEFILE=$NGX_OBJS/Makefile
複製代碼

二、生成源文件名路徑,默認爲 objs/ngx_module.c,這個文件保存了咱們編譯到nginx中的全部模塊,很是重要。測試

1NGX_MODULES_C=$NGX_OBJS/ngx_modules.c
複製代碼

三、生成默認的頭文件名,默認爲objs/ngx_auto_headers.hobjs/ngx_auto_config.hui

1NGX_AUTO_HEADERS_H=$NGX_OBJS/ngx_auto_headers.h
2NGX_AUTO_CONFIG_H=$NGX_OBJS/ngx_auto_config.h
複製代碼

四、生成測試文件和錯誤文件名。這兩個文件在nginx的配置和編譯過程當中使用。
默認爲objs/autotestobjs/autoconf.errspa

1NGX_AUTOTEST=$NGX_OBJS/autotest
2NGX_AUTOCONF_ERR=$NGX_OBJS/autoconf.err
複製代碼

五、生成STUB相關文件操作系統

1NGX_ERR=$NGX_OBJS/autoconf.err
2MAKEFILE=$NGX_OBJS/Makefile
複製代碼

六、測試echo的選項
下面的代碼其實就是測試當前的操做系統的echo命令是否支持-n,"\c"這兩個選項。兩個選項都是和換行有關的,只是爲了控制echo的顯示樣式,對咱們分析代碼沒有什麼用處,簡單瞭解一下就好了。
定義了兩個變量,ngx_nngx_c分別表示-n\c選項.code

 1# check the echo's "-n" option and "\c" capability
2
3if echo "test\c" | grep c >/dev/null; then
4
5    if echo -n test | grep n >/dev/null; then
6        ngx_n=
7        ngx_c=
8
9    else
10        ngx_n=-n
11        ngx_c=
12    fi
13
14else
15    ngx_n=
16    ngx_c='\c'
17fi
複製代碼

七、生成總的Makefile。這裏生成的Makefile是和configure同級別的,用於控制nginx的總體編譯。objs目錄下面也有一個Makefile,這個Makefile是後來生成的,要注意區分。

1# create Makefile
2
3cat << END > Makefile
4
5default:    build
6
7clean:
8    rm -rf Makefile $NGX_OBJS
9END
複製代碼

到這裏爲止,auto/init腳本已經分析完畢了,這個腳本只是作了一些初始化工做,爲後面作準備。

下篇內容

下一篇文章,咱們會講解auto/source腳本,敬請關注。



喜歡本文的朋友們,歡迎長按下圖關注訂閱號鄭爾多斯,更多精彩內容第一時間送達
鄭爾多斯
鄭爾多斯
相關文章
相關標籤/搜索