环境
关于windwos平台的WSL(个人感觉比VM虚拟机快捷方便)的安装,自行百度,极其简单快捷方便,操作系统加上apt安装包占用盘符体积2~3G左右
windows+WSL+ubuntu20.04+clion
生成cmake文件调试
1、在auto的根目录下创建名称为cmake的文件
- 没有后缀,文件名就为cmake
2. 内容如下
#!/usr/bin/env bash\
# NGX_CMAKE_FILE=$NGX_OBJS/CMakeLists.txt
# ********此处生成到项目跟目录,修改$NGX_OBJS/CMakeLists.txt为CMakeLists.txt
NGX_CMAKE_FILE=CMakeLists.txt
NGX_CMAKE_TMP=$NGX_OBJS/tmp
#output includes
cmake_ngx_incs=`echo $CORE_INCS $NGX_OBJS $HTTP_INCS $MAIL_INCS\
| sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
-e "s/\//$ngx_regex_dirsep/g"`
cat << END > $NGX_CMAKE_TMP
cmake_minimum_required(VERSION 3.6)
include_directories(
.
$cmake_ngx_incs)
END
#output src
cmake_ngx_src="$CORE_SRCS $HTTP_SRCS $MAIL_SRCS $NGX_MISC_SRCS $NGX_ADDON_SRCS $NGX_SHARED_SRCS"
cmake_ngx_src=`echo $cmake_ngx_src | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g"\
-e "s/\//$ngx_regex_dirsep/g"`
#******** 此处将ngx_modules.c修改为$NGX_OBJS/ngx_modules.c
cat << END >> $NGX_CMAKE_TMP
set(SOURCE_FILES
$NGX_OBJS/ngx_modules.c
$cmake_ngx_src)
END
#output target
cat << END >> $NGX_CMAKE_TMP
add_executable(nginx \${SOURCE_FILES})
END
#output lib
echo ${CORE_LIBS}
CMAKE_CORE_LIBS=`echo ${CORE_LIBS} | sed -e "s/-l//g"`
cat << END >> $NGX_CMAKE_TMP
target_link_libraries(nginx $CMAKE_CORE_LIBS)
END
if [ -f $NGX_CMAKE_TMP ]
then
(cat $NGX_CMAKE_TMP | sed -e "s/\\\//g") > $NGX_CMAKE_FILE
rm $NGX_CMAKE_TMP
fi
3、在nginx的根目录下,configure文件的末尾,加上这个生成cmake脚本的地址
configure启动命令
其中–prefix指定生成路径为configure同级目录下的server目录
–add-modul 指定编译目录
sudo ./configure -module=./src/ngx_http_myfilter_module --with-debug --with-file-aio --add-module=./src/sendfile_test --with-threads --add-module=./src/nginx-requestkey-module-master/ --with-http_secure_link_module --add-module=./src/redis2-nginx-module-master/ --prefix=./server
执行make命令
编译
make -j8
cmake生成的路径
在构建完成后,可以在根目录下的obj/temp目录下看到cmake文件,
复制这个CMakeLists.txt 到nginx-1.9.2的根目录下
安装
会生成一个目录文件,可能没有创建文件权限,所以使用sudo
sudo make install
启动
启动脚本设置,首先设置工具链为WSL
接着设置启动命令
最后设置运行参数,具体启动参数可以在源码中src/core/nginx.c main()启动函数 中, if (ngx_show_help) 代码内的启动参数说明
cmake -S .. -G "Unix Makefiles"
nginx -p ./../server
CMakeLists.txt
一定要跟随步骤进行编译,不同的configure配置生成的objs/目录文件是不一样的,想要编译其他的模块,同理操作