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

问题描述:


我们想快速测试一个小功能,第一个反应就是打开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对同一个路径执行多次和一次的效果是一样的,自己会做去重操作。

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

时间: 2024-11-05 16:26:49

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

高效系列:bat生成文件夹目录 & 折腾exe及icon配合

有时候我们需要新生成一套文件夹目录,就比如项目管理目录 大概的清单如下: ├─01.项目管理 │  ├─01.立项文档 │  ├─02.策划文档 │  ├─03.管理监控 │  ├─04.配置管理 │  ├─05.质量保证 │  ├─06.验收文档 │  ├─07.项目报告 │  ├─08.评审报告 │  ├─09.变更管理 │  ├─10.结项文档 │  ├─11.会议记录 │  └─12.其它文档 ├─02.需求文档 │  ├─01.用户需求说明书 │  └─02.需求规格说明书 ├─03.

erlang shell 命令中文使用手册

转载自--没有开花的树:http://blog.csdn.net/mycwq/article/details/16858805 整理的很完整,所以拿过来了, erlang shell 是在命令行模式下使用命令和 erlang 交互的工具.erlang shell功能十分强大,可以直接编译.加载.执行.调试模块等等,完全可以将shell做为erlang项目的终端使用.文章将对erlang shell 命令做介绍,还简单以示例说明. 打开erlang shell的帮助信息,在这里变成中文了.同时可以

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

人嘛,总是想提高效率,创造更多的价值,同时也得到更多的选择空间.可一个人的精力,时间终归是有限的,减少自身重复或无意义工作就显得格外重要! 要么懂得授权,要么把重复的工作交给机器来做: 现实: 美国人喜欢把不重要的开发外包给其它国家,自己做核心; 身边:上级们不都是把他们认为不值得亲自做的事派发给下级,自己留精力去琢磨更重要的事么? 但苦逼如我,根本木有授权,所以只好费劲心思想尽办法让机器来做. 所以我先从工作调试用得最多的就是shell里面下手,有必要重温下c.erl这个模块,看文档真是"磨刀

erlang shell表格数据对齐

最近在erlang shell做一些测试,为了让测试结果数据显得更直观,想对齐需要打印的数据,做成像表格一样的效果. 开始的想法是在数据中插入tab.当然,erlang也有对tab的支持,但实际效果不理想. 对tab的支持如下: 1> io:format("No1~sNo2~n1~s2~n", ["\t", "\t"]). No1        No2 1             2 ok 但数据的长度超过8个字符就有问题,那有没有一种可以

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

背景是这样的:网站一开始访问量比较小,大家就把所有的图片文件上传到一个目录下(比如是/data/images/).后来访问量大了,图片也多了,这样就影响读取效率.所以有个这样的需求,把这些个图片文件移动到多个目录下,这个目录是图片的上传日期(就是文件属性中的修改日期filemtime)组成的.比如2012-12-20的修改日期,那么现在就该放在/data/images/2012/12/20的目录下. php有很容易的操作文件的函数,可以方便完成.当然也可以利用shell脚本完成. 用shell的

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

shell运算符有很多,关系运算符,算数运算符,布尔运算符,字符串运算符和文件测试运算符 1,算术运算符 原声bash 不支持简单的算术运算,可以使用expr 工具 两点注意: 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样. 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边. #!/bin/basha=10b=20rst=`expr 2 + 2`echo '2+2 =' ${rst} rst=`exp

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

查看本地文件的 MD5 命令:md5sum FileName查看home目录下所有文件的 MD5 码:cd ~find /home -type f -print0 | xargs -0 md5sum | sort >md5.txt查看当前目录下所有文件的 MD5 码:find ./ -type f -print0 | xargs -0 md5sum | sort >md5.txt 通过上述方法对 home 文件夹里数据生成一份 md5 校验文件这个 md5 文件就这可作为这个 home 文件夹

08-Linux基础入门(六)-文件和目录的属性及权限之文件类型、文件扩展名及文件权限基础

一.Linux中的文件类型在Linux系统中,可以说一切(包括目录.普通文件.设备文件等)皆为文件.文件类型包含有普通文件.目录.字符设备文件.设备文件.符号链接文件.管道文件等等,当执行ls -l 或ls - al命令后可显示当前目录下的所有文件及文件夹: [[email protected] ~]# ls -l 总用量 40 -rw-------. 1 root root 1140 2月 5 04:28 anaconda-ks.cfg -rw-r--r--. 1 root root 2173

文件查询之三:文件和目录的批量操作

经过之前两篇的随笔已经可以将所需要的文件和目录查找出来,并且保存在一个文档中,所以现在就是利用保存文件或目录的文档来进行批量处理,对文件或目录进行批量的 删除.复制和移动.主要是用到shutil模块中的函数和os模块中的函数进行一系列的操作.shutil模块存在大量的文件操作和目录操作的函数,包括常用的移动文件或复制文件 等操作,其中os和shutil下对于函数的功能存在交集,只不过相同功能下的函数名存在差异,函数上的细节处理方面也有可能不一样.在这里主要的是讲shutil模块下的函数. 首先是