首页 > 系统相关 >cmake nginx 本地开发调试

cmake nginx 本地开发调试

时间:2023-11-15 09:46:47浏览次数:44  
标签:cmake NGINX nginx COMMAND SOURCE PATH include 调试

主要是学习下如何基于cmake 进行nginx 的本地调试,也方便学习如何开发nginx 模块

参考配置

  • CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(ngx_hello_module)
 
# Path to the Nginx source code
set(NGINX_SOURCE_PATH ${CMAKE_SOURCE_DIR}/nginx)
 
# Nginx module source files
set(MODULE_SOURCES
        src/ngx_http_hello_world_module.c
)
 
set(WITH_DEBUG "-O0 -g")
 
include(ExternalProject)
# 动态模块模式
ExternalProject_Add(
        nginx
        SOURCE_DIR ${NGINX_SOURCE_PATH}
        CONFIGURE_COMMAND cd ${NGINX_SOURCE_PATH} && ./configure --with-debug  --with-cc-opt=${WITH_DEBUG} --add-dynamic-module=${NGINX_SOURCE_PATH}/../src --with-compat
        BUILD_COMMAND make -C ${NGINX_SOURCE_PATH}/ modules
        INSTALL_COMMAND ""
)
# all-in-one 模式
ExternalProject_Add(
        nginxall
        SOURCE_DIR ${NGINX_SOURCE_PATH}
        CONFIGURE_COMMAND cd ${NGINX_SOURCE_PATH} && ./configure --with-debug  --with-cc-opt=${WITH_DEBUG}  --add-module=${NGINX_SOURCE_PATH}/../src --with-compat
        BUILD_COMMAND make -C ${NGINX_SOURCE_PATH}
        INSTALL_COMMAND ""
)
 
#ExternalProject_Add(
#        nginx_single
#        SOURCE_DIR ${NGINX_SOURCE_PATH}
#        CONFIGURE_COMMAND cd ${NGINX_SOURCE_PATH} && ./configure --with-debug  --with-cc-opt=${WITH_DEBUG}   --with-compat
#        BUILD_COMMAND make -C ${NGINX_SOURCE_PATH}
#        INSTALL_COMMAND ""
#)
# 模块copy
add_custom_command(
        TARGET nginx
        COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_SOURCE_DIR}/output
        COMMAND ${CMAKE_COMMAND} -E copy ${NGINX_SOURCE_PATH}/objs/*.so ${CMAKE_SOURCE_DIR}/output/
        COMMENT "Copy nginx module to ${CMAKE_SOURCE_DIR}/output/"
)
# Nginx module name
set(MODULE_NAME ngx_hello_module)
# 核心是添加一些以来,方便本地开发的模块进行使用
# Include directories
include_directories(${NGINX_SOURCE_PATH}/src/core)
include_directories(${NGINX_SOURCE_PATH}/src/event)
include_directories(${NGINX_SOURCE_PATH}/src/os/unix)
include_directories(${NGINX_SOURCE_PATH}/objs)
include_directories(${NGINX_SOURCE_PATH}/src/http)
include_directories(${NGINX_SOURCE_PATH}/src/http/modules)
include_directories(${NGINX_SOURCE_PATH}/src/mail)
include_directories(${NGINX_SOURCE_PATH}/src/stream)
# change to your pcre2 include path
include_directories(/usr/local/Cellar/pcre2/10.42/include)
include_directories(src)
 
set(SOURCE_FILES
        ${NGINX_SOURCE_PATH}/objs/ngx_modules.c)
# 一个target 核心是为了方便添加本地代码,方便ide 使用
add_library(nginxapp  ${MODULE_SOURCES})
 

debug 配置

核心是选择选择构建的应用(nginx)以及配置nginx 启动配置

说明

以上测试比较粗糙,可以简单的集成起来,按照比较标准的是应该修改一些nginx 的构建命令,让支持cmake 这样就可以更方便的进行开发测试了
以下参考链接中也有一个关于基于cmake 以及ExternalProject_Add 开发nginx 的实践可以参考

参考资料

https://cmake.org/cmake/help/latest/module/ExternalProject.html
https://github.com/rongfengliang/nginx_debug_cmake_learning
https://blog.openziti.io/lessons-learned-writing-a-zero-trust-nginx-module

标签:cmake,NGINX,nginx,COMMAND,SOURCE,PATH,include,调试
From: https://www.cnblogs.com/rongfengliang/p/17833148.html

相关文章

  • Rockchip RK3399 - DRM HDMI调试
    ----------------------------------------------------------------------------------------------------------------------------开发板:NanoPC-T4开发板eMMC:16GBLPDDR3:4GB显示屏:15.6英寸HDMI接口显示屏u-boot:2023.04linux:6.3----------------------------------......
  • IDEA接口调试插件不好找?这款免费用!
    IDEA插件市场中的API调试插件不是收费(FastRequest)就是不好用(apidoc、apidocx等等)今天给大家介绍一款国产的API调试插件:Apipost-Helper,完全免费且好看好用!这款插件由Apipost团队开发的,其官方介绍是:用于IDEA项目快速生成API文档,快速查询接口、接口代码功能,并支持在IDEA中进行API调......
  • IDEA接口调试插件不好找?这款免费用!
    IDEA插件市场中的API调试插件不是收费(FastRequest)就是不好用(apidoc、apidocx等等)今天给大家介绍一款国产的API调试插件:Apipost-Helper,完全免费且好看好用!这款插件由Apipost团队开发的,其官方介绍是:用于IDEA项目快速生成API文档,快速查询接口、接口代码功能,并支持在IDEA中进行API......
  • Linux基础43 nginx多server优先级, nginx禁止IP访问, nginx的alias, nginx的try_file
    Nginx常见问题一、nginx多server优先级在开始处理一个http请求时,nginx会去除header头中的Host变量,与nginx.conf中的每个server_name进行匹配,以此决定到底由哪一个server来处理这个请求,但nginx如果配置多个相同的server_name,会导致server_name出现优先级访问冲突。1.准备多个......
  • nginx返回静态文件乱码中文不显示
    如果遇到自己部署的服务出现页面中文乱码不显示的问题,在server块中,location同级添加一个charsetutf-8即可。示例:server{ listen8001;#监听的端口 server_namea.www.com;#服务名,我这里是做的二级域名,不重要,是你的服务器地址就是了 charsetutf-8;#重点就是这里啦~在......
  • 使用 nginx 和 rtmp 插件搭建视频直播和点播服务器
    使用nginx和rtmp模块,可以很容易地搭建一个视频直播和点播服务器出来。下面我们来看一下具体实施步骤:1.安装nginx和rtmp模块有关nginx的编译和安装比较简单,这里就不介绍了,看参考文献。这里提示以下几点:(1)安装好nginx后,配置文件在这里:/usr/local/nginx/conf/nginx.co......
  • Linux下C/C++配置与调试
    环境:Ubuntu18.04.6一.GCC简介:GCC是Linux下的编译工具集,是GNUCompilerCollection的缩写,包含gcc、g++等编译器,该工具及不仅包含编译器,还包含其他工具集,例如ar、num等。GCC工具集不仅能编译C/C++语言,其它例如Objective-C、Pascal、FOrtan、Java、Ada等语言均能进行编译。GC......
  • visualstudio+cmake+环境配置,及使用过程中的一些小坑点
    一、概述想要找一个免费好用的c++开发工具。期间尝试了eclipse+CDT、VSCode+Mingw64+CMake都觉得不是很好用。最后选择了社区版的VisualStudio+CMake。之所以选择这个,是因为相对于eclipse和VSCode这个更好用。就是使用过程中会遇到一些小问题。二、配置1.下载Vis......
  • 1823_ChibiOS的调试功能
    GreyZhang/g_ChibiOS:IfoundanewRTOScalledChibiOSanditseemsinteresting!(github.com)1.这里提到的调试,debug,跟测试工作本身是没有直接关系的。主要是为了保证开发以及实现上的保障来考虑的。2.所有的调试选项对于内核配置来说都是可访问的,这种设计应该是因为这样的......
  • Net 高级调试之八:代码审查及杂项命令
    一、简介今天是《Net高级调试》的第八篇文章。这篇文章设计的内容挺多的,比如:如何查看方法的汇编代码,如何获取方法的描述符,对象同步块的转储,对象方法表的转储,托管堆和垃圾回收器信息的转储,CLR的版本,GC模式,等等,内容挺多的。内容虽然挺多,但是这些都是高级调试的基础。虽然......