当前位置:编程学习 > 网站相关 >>

vimerl自动编译

 vimerl配置好后,在文件每次保存时会自动进行语法检查。但是我发现,修改一个文件后,使用rebar进行编译,花费的时间比较长,主要是项目文件较多,编译遍历整个项目花了大量时间。我们可以做一些小的修改就可以在文件保存时自动生成 *.beam,由于只编译一个文件,所以速度很快.
 
      首先查看erlang_check.erl文件, 原有代码在不能生成*.beam文件的原因在于编译时使用了strong_validation标志,查阅erlang文档可知这个标志不会生成目标代码。在erlang_check.erl的main函数中增加一个目标路径参数, 在函数最后重新编译一下,修改后的代码如下
 
[plain]  
%%可以指定输出目录  
main([File, OutDir]) ->  
    Dir = filename:dirname(File),  
    Defs = [strong_validation,  
            warn_export_all,  
            warn_export_vars,  
            warn_shadow_vars,  
            warn_obsolete_guard,  
            warn_unused_import,  
            report,  
            {i, Dir ++ "/include"},  
            {i, Dir ++ "/../include"},  
            {i, Dir ++ "/../../include"}],  
     Result =   
        case file:consult("rebar.config") of  
            {ok, Terms} ->  
                RebarDeps = proplists:get_value(deps_dir, Terms, "deps"),  
                code:add_paths(filelib:wildcard(RebarDeps ++ "/*/ebin")),  
                RebarOpts = proplists:get_value(erl_opts, Terms, []),  
                compile:file(File, Defs ++ RebarOpts);  
            _ ->  
                compile:file(File, Defs)  
        end,  
     
        Defs2 = [  
            {i, Dir ++ "/include"},  
            {i, Dir ++ "/../include"},  
            {i, Dir ++ "/../../include"},  
            {outdir, OutDir}],  
        compile:file(File, Defs2),   %再次编译,这次会生成目标代码  
     Result;  
 
 
 
现在还需要将目标路径传入,在vim配置文件中加入一行
"根据项目来设置erlang输出目录www.zzzyk.com
if  getcwd() == "e:\\server_src" 
    let = my_erlang_out_dir = getcwd() . "/ebin"
endif
 
在erlang.vim文件中,加入下面代码,这样非定义项目中的erlang文件将输出到当前目录:
if !exists("my_erlang_out_dir")
    let my_erlang_out_dir = getcwd()
endif
 
还需要将目标路径传入erlang_check.erl,修改erlang.vim中的makeprg参数,在后面加上路径参数
execute "setlocal makeprg=escript.exe\\ " . s:erlang_check_file . "\\ \%\\ ". g:my_erlang_out_dir
 
补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,