emqx v3.2.0 编译流程

emqx v3.2.0 编译流程

获取emqx v3.2.0源码

git clone -b v3.2.0 https://github.com/emqx/emqx-rel.git

编译命令

cd emqx-rel; make

到底make如果执行,然后又调用哪个命令进行项目编译的呢?下面一步步进行揭秘:

make

make基本语法:
目标:依赖1 依赖2 ……
命令

emqx Makefile文件执行关键流程:

make需要获取的目标

获取具体的编译指令

PROFILE ?= emqx
PROFILES := emqx emqx_pkg emqx_edge emqx_edge_pkg

CT_APPS := emqx_auth_jwt emqx_auth_mysql emqx_auth_username \
>--->---emqx_delayed_publish emqx_management emqx_recon emqx_rule_enginex \
>--->---emqx_stomp emqx_auth_clientid  emqx_auth_ldap   emqx_auth_pgsql \
>--->---emqx_coap emqx_lua_hook emqx_passwd emqx_reloader emqx_sn \
>--->---emqx_web_hook emqx_auth_http emqx_auth_mongo emqx_auth_redis \
>--->---emqx_dashboard emqx_lwm2m emqx_psk_file emqx_retainer emqx_statsd

.PHONY: default
default: $(PROFILE)

.PHONY: all 
all: $(PROFILES)

.PHONY: distclean
distclean:
>---@rm -rf _build
>---@rm -f data/app.*.config data/vm.*.args rebar.lock
>---@rm -rf _checkouts

.PHONY: $(PROFILES)
$(PROFILES:%=%):
ifneq ($(OS),Windows_NT)
>---ln -snf _build/$(@)/lib ./_checkouts
endif
>---$(REBAR) as $(@) release

最后执行的具体编译命令为: rebar3 as emqx release 可以看到emqx v3.2.0版本抛弃了之前的rebar 使用了更高级的rebar3。 并不是emqx抛弃了rebar 是官网抛弃了,哈哈…… 详情:https://www.rebar3.org/

rebar3

这个东西到底怎么用呢? 参见上述连接哈 虽然是英文文档但是还算是能看懂,
关键点:
1.动态配置文件:https://www.rebar3.org/docs/dynamic-configuration
2.基本用法:https://www.rebar3.org/docs/basic-usage

可以看到emqx-rel目录下存在两个文件:rebar.config rebar.config.script 这两个文件就是rebar3要执行的配置文件,所有的emqx控制点也就在这个配置文件中

由于在同一目录下存在*.script文件 会优先加载改文件并进行解析, 该文件一个重要的变量CONFIG 及rebar.config的整体文件内容, 会对rebar.config文件进行定制化的修改。

LINXU系统下可以参见/tmp/emqx.rebar.config文件,该文件就是动态加载后的文件

rebar3 的第一个主要工作

将emqx的所有依赖关系从git上进行获取,并保存在_bulid/emqx目录下,此时该目录下保存的全部为emqx相关源码

rebar3 的第二个重要工作

调用relx编译工具对步骤一获取的源码进行编译生成可执行的程序。

relx 是啥?

relx

relx为erlang项目的一个编译程序。
使用方法参见:https://github.com/erlware/relx

relx的编译配置哪里获取的呢? 就是rebar3动态配置加载的时候会有一个relx的配置项,该配置项的最后使用者就是relx

将emqx打包成tar

一行命令: rebar3 as emqx tar
会在_build/emqx/rel/emqx下生成tar包

发布了11 篇原创文章 · 获赞 1 · 访问量 2442

猜你喜欢

转载自blog.csdn.net/linux_cwg/article/details/102508011