设为首页收藏本站

Erlang中文论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 29238|回复: 2

erlang.mk文档(1)

[复制链接]
发表于 2018-11-6 15:59:50 | 显示全部楼层 |阅读模式
本帖最后由 茶叶feng 于 2018-11-6 16:01 编辑

### erlang.mk使用记录
没什么中文文档,我就边看边下jb记一下
下面我都当你装好了otp的前提,操作系统我也是按照我的centos标准来说明我是记在有道云的,有兴趣看看咯 http://note.youdao.com/noteshare ... 750A3CC0AAA96536B8E

#### 下载安装
下载挺简单的   
```
wget https://erlang.mk/erlang.mk
```
简单快捷,能上网就行

要正常用的话os里面要装git,想办法装个呗,直接```yum install git```就行了

#### 创建项目
```
make -f erlang.mk bootstrap
```
创建的起始项目比rebar干净得多,我比较喜欢这点,你不写项目名会根据你目录名生成,,比如我在myapp目录下输入```make -f erlang.mk bootstrap```目录下会生成成这样
```
.
|-- erlang.mk
|-- Makefile
`-- src
    |-- myapp_app.erl
    `-- myapp_sup.erl
```
如果觉得麻烦,可以先创建Makefile,在里面输入写
```
include erlang.mk
```
这样就能直接```make```生成了
#### 创建库
```
make -f erlang.mk bootstrap-lib
```
这样创建出来的项目是空的,只有Makefile和src目录,src目录下什么都没
```
.
|-- erlang.mk
|-- Makefile
`-- src
```

#### 发布
```
make bootstrap-rel
make -f erlang.mk bootstrap-lib bootstrap-rel
```
第一行是你本来已经生成了项目的时候用,第二行是什么都还没有的时候用
会多出rel目录和relx.config文件
```
.
|-- erlang.mk
|-- Makefile
|-- rel
|   |-- sys.config
|   `-- vm.args
|-- relx.config
`-- src
    |-- myapp_app.erl
    `-- myapp_sup.erl
```
#### 编译
##### 编译
```
make
```
然后就会帮你获取依赖,编译,发布,目录变成这样
```
.
|-- ebin
|   |-- myapp.app
|   |-- myapp_app.beam
|   `-- myapp_sup.beam
|-- erlang.mk
|-- Makefile
|-- src
|   |-- myapp_app.erl
|   `-- myapp_sup.erl
`-- myapp.d
```
如果有发布的话,还会下载relx工具用来生成发布包
则会是这样
```
.
|-- ebin
|   |-- myapp.app
|   |-- myapp_app.beam
|   `-- myapp_sup.beam
|-- erlang.mk
|-- Makefile
|-- myapp.d
|-- rel
|   |-- sys.config
|   `-- vm.args
|-- _rel
|   `-- myapp_release
|       |-- bin
|       |-- erts-10.0
|       |-- lib
|       |-- myapp_release-1.tar.gz
|       `-- releases
|-- relx.config
`-- src
    |-- myapp_app.erl
    `-- myapp_sup.erl
```
如果只是编译应用
```
make app
```
如果同时要忽略依赖库
```
make app SKIP_DEPS=1
```
只编译依赖库
```
make deps
```
编译发布包
```
make rel
```
当第一次运行make的时候,erlang.mk将编译所有文件,之后再make的时候将只重新编译修改过的文件

##### 参数
当你编译的时候,erlang.mk必定生成在ebin/$(PROJECT).app文件,如果src目录下存在src/$(PROJECT).app.src文件,则优先从src/$(PROJECT).app.src文件生成

下面是相关的一些配置字段,可以在Makefile中赋值使用
```PROJECT``` 应用名或库名
```PROJECT_DESCRIPTION``` 应用描述
```PROJECT_VERSION``` 版本
```PROJECT_MOD``` 应用回调模块
```PROJECT_REGISTERED``` 注册的进程
```PROJECT_ENV``` 参数
```PROJECT_APP_EXTRA_KEYS``` 额外的一些值想要添加到.app文件中,例如```PROJECT_APP_EXTRA_KEYS = {maxT, 10000}, {start_phases, [...]}.```
```LOCAL_DEPS``` otp中需要依赖的项目,例如erts,kernel,stdlib等等
```DEPS``` 依赖的远程库

各种不同文件生成的目标文件和路径

扩展名 | 目录 | 描述 | 输出     
---|---|---|---
.erl | src/ | erlang源文件 | ebin/*.beam
.core | src/ | erlang核心文件 | ebin/*.beam
.xrl | src/ | Leex source | src/*.erl
.yrl | src/ | Yecc source | src/*.erl
.asn1 | asn1/ | ASN.1文件 | include/.hrl include/.asn1db src/*.erl
.mib | mibs/ | SNMP MIB文件 | include/.hrl priv/mibs/.bin
.dtl | templates/ | Django templates | ebin/*.beam
.proto | src/ | Protocol buffers文件 | ebin/*.beam

编译参数
- ERLC_OPTS
参考erlc文档,例如:
```
ERLC_OPTS = -Werror +debug_info +warn_export_vars +warn_shadow_vars +warn_obsolete_guard
```
- ERLC_EXCLUDE
排除某些组件,例如:
```
ERLC_EXCLUDE = coboy_http2
```

##### 依赖性跟踪
依赖性跟踪仅限于项目内的文件,跟依赖项目无关,由$(PROJECT).d文件描述,它会告诉erlang.mk应该先编译那些文件在需要编译一个文件时

但是如果不想使用依赖性跟踪时,可以在$(PROJECT).d添加参数
```NO_MAKEDEP = make```

##### 清空旧文件
```
make clean
```
删除构建产生的所有中间文件,包括beam、.d和doc文件
```
make distclean
```
删得更多,包括依赖应用、dialyzer的plt文件和生成的发布

#### 使用模板
查看有哪些模板
```
make list-templates
```
通过模板生成文件
```
make new t=TempName n=ModuleName
```
这样会在src下生成你想要的文件


回复

使用道具 举报

发表于 2018-12-10 19:04:26 | 显示全部楼层
要相办法可以支持 md
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-12 11:31:49 | 显示全部楼层
dreamxyp 发表于 2018-12-10 19:04
要相办法可以支持 md

哈哈哈,没办法,我都是直接从我的有道笔记复制过来的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Erldoc.com  

GMT+8, 2024-3-29 17:54 , Processed in 0.374830 second(s), 9 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表