Erlang中文论坛

标题: 不同环境下批量编译.erl文件 [打印本页]

作者: 茶叶feng    时间: 2018-6-27 19:10
标题: 不同环境下批量编译.erl文件
本帖最后由 茶叶feng 于 2018-7-9 13:58 编辑

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

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

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

  15. # 编译文件
  16. all:dir compile cp

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

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

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

  24. # 执行编译
  25. compile:$(NEEDFILES)

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

  29. # beam文件生成公式
  30. %.beam:%.erl
  31.     ${ERLC} [        DISCUZ_CODE_12        ]lt;
复制代码

2. windows下面批量编译.erl文件,下面是cmd中输入的命令
  1. for %f in (src/*.erl) do erlc -o ebin src/%f
复制代码
3.想要使用erlang自带的make模块来批量编译文件,因为make模块需要用到Emankefile文档,所以下面需要两个文件配合使用,Makefile和Emakefile一起用

  1. erl:compile

  2. compile:
  3.     erl -pa ./ebin -noinput \
  4.     -eval "case make:all() of up_to_date -> halt(0); error -> halt(1) end"
复制代码

  1. {"src/*", [report, verbose, {i, "include"}, {outdir, "ebin"}]}.
复制代码
当Makefile执行erl的-eval参数的时候,就回调用make:all/0,它就会寻找Emakefile文件然后根据参数编译文件


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


作者: dreamxyp    时间: 2018-7-6 21:05
谢谢 分享。Emakefile 比较好用




欢迎光临 Erlang中文论坛 (https://bbs.erldoc.com/) Powered by Discuz! X3.3