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包

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章