微信公衆號:鄭爾多斯
關注可瞭解更多的Nginx
知識。任何問題或建議,請公衆號留言;
關注公衆號,有趣有內涵的文章第一時間送達!nginx
上一篇文章咱們詳細的講解了auto/option
文件,該文件主要是爲了初始化傳遞給configure
的命令參數。本文繼續講解configure
腳本調用的第二個文件auto/init
。web
這個腳本主要是進行一些變量的初始化工做,爲後續的Makefile
文件進行準備工做。
在分析auto/init
腳本以前,先要認識一個變量NGX_OBJS
,這個變量是在auto/options
文件中進行賦值的,它的做用:用於保存編譯相關的文件。bash
1NGX_OBJS=objs // 默認的值是objs
複製代碼
在auto/options
的for
循環中,對該變量進行了再次賦值,咱們將這部分代碼摘出來,以下:微信
1case "$option" in
2 --builddir=*) NGX_OBJS="$value" ;;
3esac
複製代碼
也就是說,咱們能夠在執行configure
命令的時候經過指定--builddir=path
的方式將該變量的值設置爲咱們自定義的path
。
下面咱們接着分析auto/init
腳本,功能以下:
一、設置Makefile
文件路徑,默認爲objs/Makefile
app
1NGX_MAKEFILE=$NGX_OBJS/Makefile
複製代碼
二、生成源文件名路徑,默認爲 objs/ngx_module.c
,這個文件保存了咱們編譯到nginx
中的全部模塊,很是重要。測試
1NGX_MODULES_C=$NGX_OBJS/ngx_modules.c
複製代碼
三、生成默認的頭文件名,默認爲objs/ngx_auto_headers.h
和objs/ngx_auto_config.h
ui
1NGX_AUTO_HEADERS_H=$NGX_OBJS/ngx_auto_headers.h
2NGX_AUTO_CONFIG_H=$NGX_OBJS/ngx_auto_config.h
複製代碼
四、生成測試文件和錯誤文件名。這兩個文件在nginx
的配置和編譯過程當中使用。
默認爲objs/autotest
和objs/autoconf.err
。spa
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_n
和ngx_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
腳本,敬請關注。