问题描述:

我们想快速测试一个小功能,第一个反应就是打开Erl shell 直接输入,但是当想测试一个复杂的函数时,一般会写成一个*.erl文件,然后在shell下:

cd(FileDir).
c(FileName).

每次都为一个小功能设置FileDir,好烦!

解决方法:

方法1 .  在erlang工作目录【在erl shell中运行pwd()显示的目录】建立一个.erlang文件,输入:

io:format("changing work path~n").
cd(“你建立测试工作目录”).
io:format(“change path successfully!~n").

看到successfully表明ok了,原理:erlang shell启动时会首先找当前目录下的.erlang执行的,所以让它启动时都自动cd到测试目录。

方法2. 由于前一种方法,只能设置一个测试目录且输入的*.beam文件与原文件同一目录下,假如,我们在多个目录下有文件,且想输入的测试文件都在一个统一的文件目录下,怎么办?

就是说:不管FileName在哪里?,打开erl就可以用c(FileName).输出beam也在统一的一个目录下

Prework: user_default.erl

2.1  编写自己的user_default.erl

-module(user_default).
%% API
-compile(export_all). %%常用的测试目录:请保证路径正确,注意路径里面是用/ 或\\的
-define(WORK_DIRS,[
"常用的测试代码1路径",
"常用的测试代码2路径"
]).
-define(INCLUDE_DIRS,[“常用的测试代码头文件”]).%
-define(OUT_DIR,"输出统一目录").%%这个目录要已创建好的 cfile(FileName) ->
code:add_path(?OUT_DIR),
cfile(FileName,?WORK_DIRS). cfile(FileName,[]) ->
{erlang:atom_to_list(FileName)++":not find",?WORK_DIRS};
cfile(FileName,[Path|Left]) ->
FileDir = Path++erlang:atom_to_list(FileName)++".erl",
case file:read_file_info(FileDir) of
{ok, _} ->
c:cd(Path),
IncludeDirs = [begin {i,Dir} end||Dir<- ?INCLUDE_DIRS],
case compile:file(FileName,[{outdir,?OUT_DIR},report,verbose]++IncludeDirs) of
{ok,T} -> c:l(T),{ok,T};
Err -> Err
end;
_ ->
cfile(FileName,Left)
end.

2.2  把user_default.erl编译成beam文件后放在HOME【erlang shell 启动时pwd()的目录下】

%%如果不想重启,运行
code:load_abs("$PATH/user_default").
%%从此你就可以用cfile
cfile(FileName).

拓展和收获:

   1.  在shell中使用的很多函数最终都会在c.erl里面调用,感兴趣可以看看哦。

2.  compile:file里面的option很丰富,有意思的有’P’,’E’….生成的文件把头文件都拓展开了,可以看下,

小坑:虽然可以用{outdir,Dir}指定输出目录,但是不可以指定原文件目录,只能用{i,Dir}指定头文件目录。这就是为什么上面的cfile函数要先cd到目标目录才编译的原因

3.   内置的c(FileName) 有一个额外的功能:只要成功了,就会用最新的文件替换掉旧的文件,热更新,它是用compile:file/1 和 l/1实现的.

4. code:add_path/1对同一个路径执行多次和一次的效果是一样的,自己会做去重操作。

2014年9月11日 16:02:35 我现在改用Rebar啦,超炫酷哇:https://github.com/rebar/rebar/wiki/Getting-started

[Erlang06]在Erlang shell怎么在目录A下编译目录B下的文件,并把生成文件统一放置目录C?的更多相关文章

  1. [Erlang18]教练!又发现Erlang Shell里面的神奇函数一只

      人嘛,总是想提高效率,创造更多的价值,同时也得到更多的选择空间.可一个人的精力,时间终归是有限的,减少自身重复或无意义工作就显得格外重要! 要么懂得授权,要么把重复的工作交给机器来做: 现实: 美 ...

  2. erlang shell表格数据对齐

    近期在erlang shell做一些測试,为了让測试结果数据显得更直观,想对齐须要打印的数据,做成像表格一样的效果. 開始的想法是在数据中插入tab. 当然,erlang也有对tab的支持,但实际效果 ...

  3. 利用shell脚本或者php移动某个文件夹下的文件到各自的日期组成的目录下

    背景是这样的:网站一开始访问量比较小,大家就把所有的图片文件上传到一个目录下(比如是/data/images/).后来访问量大了,图片也多了,这样就影响读取效率.所以有个这样的需求,把这些个图片文件移 ...

  4. [Erlang30]Erlang shell是如何工作的?

    一些关于Erlang启动进程的分析:希望你会喜欢. 原英文地址:http://ferd.ca/repl-a-bit-more-and-less-than-that.html 研究Erlang shel ...

  5. shell运算符之 关系运算符,算数运算符,布尔运算符,字符串运算符和文件测试运算符

    shell运算符有很多,关系运算符,算数运算符,布尔运算符,字符串运算符和文件测试运算符 1,算术运算符 原声bash 不支持简单的算术运算,可以使用expr 工具 两点注意: 表达式和运算符之间要有 ...

  6. Shell 对整个文件夹中的文件进行MD5校验 [转]

    查看本地文件的 MD5 命令:md5sum FileName查看home目录下所有文件的 MD5 码:cd ~find /home -type f -print0 | xargs -0 md5sum ...

  7. 删除文件夹下面的文件的shell命令

    首先看我的文件所在目录 我想删除位于desktop下面的helloBox中的react-hello-dimple中的package.json文件,我们注意一下时间是4月18号 shell命令如下 $ ...

  8. python 导入模块的坑。为什么整个项目能运行,单独运行某个文件模块就报错?多层目录不同文件夹怎么导入?

    一些文章介绍了python不同目录怎么导入问题,但py文件运行起点却从来没有文章说过!这是相当重要的!! 这个连接是网上99%的所讲的导入 https://www.cnblogs.com/luoye0 ...

  9. WEB安全第二篇--用文件搞定服务器:任意文件上传、文件包含与任意目录文件遍历

    零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...

随机推荐

  1. 有关DotNetBar设计样式和运行时的样式不一致的问题

    可以在 窗体类构造函数的InitializeComponent后加上下面圈出的内容:  this.EnableGlass = false; 参考文章 DotNetBar如何控制窗体样式

  2. iOS学习之iOS沙盒(sandbox)机制和文件操作之NSFileManager

    我们看看NSFileManager如何使用.包括创建文件,目录,删除,遍历目录等. 1.在Documents里创建目录 创建一个叫test的目录,先找到Documents的目录, [cpp] view ...

  3. LeetCode之数组处理题java

    342. Power of Four Total Accepted: 7302 Total Submissions: 21876 Difficulty: Easy Given an integer ( ...

  4. WCF配置Tcp协议

    注意点: 1,<serviceMetadata httpGetEnabled="false"/>   2,       <services>         ...

  5. mySQL中插入多条记录

    用一条INSERT向SQL中插入多条记录 2008-12-22 10:07:01|  分类: 记事本_编程技术|举报|字号 订阅     Sql 语法: 插入多行记录 Insert Into Tabl ...

  6. java.lang.NoSuchMethodError: org.springframework.dao.IncorrectResultSizeDataAccessException

    spring data jpa  运用,在dao类中写自己新增的方法,使用@query写hql语句,出现以下异常: Caused by: java.lang.NoSuchMethodError: or ...

  7. vue的样式绑定

    vue在样式绑定,看这官方的文档,怎么试都不行后来看了一篇文章 <div :class="[rankClass]"></div> <script> ...

  8. Java网络编程小结 URLConnection协议处理器

    URL和URLConnection类 网络中的URL(Uniform Resource Locator)是统一资源定位符的简称.它表示Internet上某一资源的地址.通过URL我们可以访问Inter ...

  9. 原生JS的使用,包括jquery和原生JS获取节点、jquery和原生JS修改属性的比较

    一.前言 相比于JS这条直达终点.满是荆棘的小路,jquery无疑是康庄大道了,足够的简洁.易用给了它辉煌的地位.然而,毕竟是绕着道的插件,当小路走着走着变成大路的时候,曾经的大路也就失去了他自身的优 ...

  10. unity与android交互总结

    http://www.jianshu.com/p/4739ce2f4cd1 http://www.cnblogs.com/suoluo/p/5443889.html http://www.th7.cn ...