最近想看一下优秀的C语言开源项目,其中nginx很多人推荐,所以从它开始,进行源码阅读,记录一下本地环境搭建过程。1. vscode所需插件clangd:代码补全、跳转、语法检查等功能。Bookmarks:代码书签,方便对关键代码进行标记。2. 下载nginx源码$ git clone https://github.com/nginx/nginx.git $ tree -L 2 . ├── auto │ ├── cc │ ├── configure │ ├── define │ ├── endianness │ ├── feature │ ├── have │ ├── have_headers │ ├── headers │ ├── include │ ├── init │ ├── install │ ├── lib │ ├── make │ ├── module │ ├── modules │ ├── nohave │ ├── options │ ├── os │ ├── sources │ ├── stubs │ ├── summary │ ├── threads │ ├── types │ └── unix ├── conf │ ├── fastcgi.conf │ ├── fastcgi_params │ ├── koi-utf │ ├── koi-win │ ├── mime.types │ ├── nginx.conf │ ├── scgi_params │ ├── uwsgi_params │ └── win-utf ├── contrib │ ├── geo2nginx.pl │ ├── README │ ├── unicode2nginx │ └── vim ├── docs │ ├── dtd │ ├── GNUmakefile │ ├── html │ ├── man │ ├── text │ ├── xml │ ├── xsls │ └── xslt ├── Makefile ├── misc │ ├── GNUmakefile │ └── README └── src ├── core ├── event ├── http ├── mail ├── misc ├── os └── stream下载下来的文件结构是这个样子的。我们主要关心:src:源码目录,可以看到包含核心模块、事件模块、HTTP模块、邮件模块、OS模块、流模块等auto/configure:源码编译脚本3. 编译nginx源码调用编译脚本,编译后生成makefile和compile_commands.json,clangd可以读取这个json文件进行代码补全、跳转等功能。#!/bin/bash # 编译源码,如果不加运行参数,则只编译内核模块 # 本着学习的原则,这里我编译所有模块 # 这也意味着会有更多的依赖库 # 缺什么依赖库,执行此脚本会报错提醒 ./auto/configure \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_stub_status_module \ --with-http_auth_request_module \ --with-http_xslt_module=dynamic \ --with-http_image_filter_module=dynamic \ --with-http_geoip_module=dynamic \ --with-http_perl_module=dynamic \ --with-threads \ --with-stream \ --with-stream_ssl_module \ --with-stream_ssl_preread_module \ --with-stream_realip_module \ --with-stream_geoip_module=dynamic \ --with-mail \ --with-mail_ssl_module \ --with-file-aio \ --with-http_v2_module \ --with-ipv6 # 生成编译数据库 bear -- make4. vscode配置在源码目录下建立.vscode文件夹:打开settings.json,添加以下内容,告知clangd编译数据库的位置:{ "clangd.arguments": [ "--compile-commands-dir=${workspaceFolder}" ], }打开c_cpp_properties.json,添加以下内容,指定编译器路径,头文件路径等:{ "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**" ], "defines": [], "compilerPath": "/usr/bin/gcc", "cStandard": "c17", "cppStandard": "c++14", "intelliSenseMode": "linux-gcc-x64" } ], "version": 4 }5. 成品展示还有一点模块的库没有装完,有少数报错,目前已经够了,先开始学习吧。