nginx 编译应通过 ./configure 脚本自动生成 makefile,而非手动编写或修改;所有编译配置须使用其参数(如 --prefix、--with-http_ssl_module 等)控制,确保可复现性与正确性。

不需要手动编写自定义 Makefile。
configure 脚本会自动生成 Makefile
Nginx 源码中不提供现成的 Makefile,也不鼓励用户手写或修改它。真正的编译入口是 ./configure 脚本——它会根据你传入的参数自动检测系统环境、依赖库路径、模块配置,并生成适配当前系统的 objs/Makefile 和 objs/ngx_modules.c 等关键文件。
直接编辑 Makefile 不仅容易出错,还会在下次运行 configure 时被覆盖,属于非标准、不可复现的操作。
通过 configure 参数控制编译行为
所有影响编译结果的关键设置,都应通过 ./configure 的选项完成:
-
--prefix=/path:指定安装根目录(如
/usr/local/nginx) - --with-http_ssl_module:启用 HTTPS 支持
- --with-pcre --with-zlib --with-openssl:显式指定第三方库路径(当系统默认路径未被识别时)
- --add-module=/path/to/your/module:集成自定义 HTTP 模块(要求模块目录含 config 文件)
- --with-ld-opt="-Wl,-rpath,/usr/local/ssl/lib":追加链接器选项,解决运行时动态库找不到的问题
- --with-cc-opt="-O2 -g":添加 C 编译器选项,比如优化等级或调试信息
验证生成的 Makefile 是否符合预期
运行 configure 后,可快速检查生成结果:
- 执行
make -n(dry-run),查看将要执行的编译命令,确认 gcc 路径、宏定义、包含目录、链接库是否正确 - 打开
objs/Makefile,搜索CFLAGS、LIBS、MODULES等变量,核对关键参数是否已写入 - 运行
nginx -V安装后,确认输出中包含你启用的模块和 configure 参数
特殊情况下的 Makefile 微调(不推荐但可行)
极少数场景下,比如需强制替换某个静态链接行为,可在 configure 执行后、make 前临时修改 objs/Makefile:
- 仅修改以
CC=、CFLAGS=、LIBS=开头的行 - 避免改动目标规则(%: %.c 这类)、依赖关系或 objs/ 目录结构
- 每次修改后务必用
make clean && make重建,防止残留对象文件引发冲突
这类操作应记录变更点,且优先考虑是否可通过 --with-cc-opt 或 --with-ld-opt 更规范地实现。











