茶叶feng 发表于 2018-6-27 19:10:10

不同环境下批量编译.erl文件

本帖最后由 茶叶feng 于 2018-7-9 13:58 编辑

1.linux下使用makefile来批处理.erl文件,下面是makefile内容
# 根目录
SHELL_DIR := $(shell pwd)
# 目标文件目录
EBIN_DIR := $(SHELL_DIR)/ebin
# 源文件目录
SRC_DIR := $(SHELL_DIR)/src
# 引用文件目录
INCLUDE_DIR := $(SHELL_DIR)/include

# 单文件编译脚本
ERLC := erlc -o $(EBIN_DIR) -I $(INCLUDE_DIR) -pa $(EBIN_DIR)

# 获取指定目录下.erl文件
define trav
    $(wildcard $(1)/*.erl)
endef

# 编译文件
all:dir compile cp

# 获取src目录下所有.erl文件
ALLFILES := $(call trav, $(SRC_DIR))

# 所有.beam文件路径
NEEDFILES := $(patsubst %.erl, %.beam, $(ALLFILES))

# 生成目标路径
dir:
    mkdir -p $(EBIN_DIR)

# 执行编译
compile:$(NEEDFILES)

# 生成.app文件
cp:
    cp -a $(SRC_DIR)/tman.app.src $(EBIN_DIR)/tman.app

# beam文件生成公式
%.beam:%.erl
    ${ERLC} [      DISCUZ_CODE_12      ]lt;
2. windows下面批量编译.erl文件,下面是cmd中输入的命令
for %f in (src/*.erl) do erlc -o ebin src/%f3.想要使用erlang自带的make模块来批量编译文件,因为make模块需要用到Emankefile文档,所以下面需要两个文件配合使用,Makefile和Emakefile一起用


[*]Makefile
erl:compile

compile:
    erl -pa ./ebin -noinput \
    -eval "case make:all() of up_to_date -> halt(0); error -> halt(1) end"

[*]Emakefile
{"src/*", }.当Makefile执行erl的-eval参数的时候,就回调用make:all/0,它就会寻找Emakefile文件然后根据参数编译文件


在这个平台做个记录,大佬欢迎来喷

dreamxyp 发表于 2018-7-6 21:05:54

谢谢 分享。Emakefile 比较好用
页: [1]
查看完整版本: 不同环境下批量编译.erl文件