Skip to content


Ultraedit高级应用(1) - 快速生成远程工程

2,070 浏览

由于目前我从事的开发工作只能在Unix上编译和测试,开发人员一般都习惯于在Windows下使用Ultraedit(以下简称UE)编辑代码,然后再FTP上传,这注定了IDE将与我们无缘。在无比怀念Eclipse、Visual Studio的同时,我尝试了很多Windows下优秀的C++开发工具,不断地比较和取舍后最终还是回归了UE。
UE曾经是16进制编辑器的代名词,强大的列编辑模式目前也无人能及,多年的演进让它的功能丰富了到让人望而生畏(想想那一屏高的右键菜单),幸好它还拥有着同样强大的可定制性。经过一番配置和二次开发后,现在我开发后台已经颇为顺手,下面介绍一下我的定制过程,均基于我当前在用的v15.10.0.1028版本。

我的开发方式要求我们的工具要有远程编辑功能;为了方便,我还希望能以目录树的方式,随选随改;工作的网络环境不是很理想,希望切换远程目录时不会停顿;我的编辑仅限于代码文件,不希望编译过程中产生的中间文件(包括中间代码文件)干扰我的视线。在我尝试过的众多文本编辑器和IDE中,只有UE优雅地解决了这些问题。

UE中的工程同时支持本地文件和远程文件,支持多层虚目录,只须将FTP上的源文件组织成一个工程,即可快速编辑,文件也可以保持原来的目录层次,避免了FTP方式的频繁加载目录和中间文件的干扰。

UE工程设置

我的工作可能涉及5个子系统,近200个模块,将这些模块人工组织成UE工程明显不现实。研究工程文件发现,一个工程共分为3部分,头部是格式声明,然后是目录层次,最后是每个目录下的文件全路径,如下:

[Project ID]
Signature=UE Proj: v.1
[Project Information]
Use Relative Directory=1
Relative to Project File=1
[Group]
0=busiaccep_svr
1=busiaccep_svr - busicompleteintfmgr
2=busiaccep_svr - busicompleteintfmgr - kernel
3=busiaccep_svr - busicompleteintfmgr - include
4=busiaccep_svr - busicompleteintfmgr – mgr
……
[Files - busiaccep_svr - busicompleteintfmgr - kernel]
0=FTP::182ng\/home/blahblahblah/busiaccep_svr/busicompleteintfmgr/kernel|interfaceip_db.obd
1=FTP::182ng\/home/blahblahblah/busiaccep_svr/busicompleteintfmgr/kernel|public_intf_db.obd
2=FTP::182ng\/home/blahblahblah/busiaccep_svr/busicompleteintfmgr/kernel|Makefile
[Files - busiaccep_svr - busicompleteintfmgr - include]
0=FTP::182ng\/home/blahblahblah/busiaccep_svr/busicompleteintfmgr/include|IUserProm_mgr.h
1=FTP::182ng\/home/blahblahblah/busiaccep_svr/busicompleteintfmgr/include|IUserCell_mgr.h
……

这应该可以写一个Shell脚本,遍历UNIX上的源代码目录,生成项目文件,下载到Windows中用UE打开,最终证实是可行的。脚本如下:

?Download ue_prj.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/bin/ksh
 
#
# 根据当前目录生成UltraEdit工程文件内容
#   将生成的内容存储为.prj文件, 即可作为UE工程打开
#
# caijw 创建    2009-5-6 13:50:30
#
 
# 参数
FILTER="Makefile .c .cpp .h"
FTP_LINK="182ng"
CUR_PATH=`pwd`
 
# 生成项目头部信息
echo "[Project ID]"
echo "Signature=UE Proj: v.1"
echo "[Project Information]"
echo "Use Relative Directory=1"
echo "Relative to Project File=1"
 
# 生成目录结构信息
echo "[Group]"
find . -type d | egrep -v \/CVS$ | egrep -v .svn | egrep -v ^\.$ | awk -F"/" '{print NR-1"="substr($0, 3)}' | sed 's/\// - /g'
 
# 生成文件列表
find . -type f | egrep -v \/CVS\/ | egrep -v \/.svn\/ | egrep -v ^\.$ | awk '{print substr($0, 2)}' | awk '
BEGIN{
    FS="/";
    LAST_PATH="/DEV/NULL";
    FILE_IDX = 0;
}
{
    SCAN_PATH = substr($0, 0, last_index($0, "/") - 1);
    UE_PATH=SCAN_PATH;
    gsub("/", " - ", UE_PATH);
 
    if(SCAN_PATH != LAST_PATH) {
        print "[Files"UE_PATH"]";
        LAST_PATH = SCAN_PATH;
        FILE_IDX = 0;
    }
 
    print FILE_IDX"=FTP::'$FTP_LINK'\\'${CUR_PATH}'"SCAN_PATH"|"$NF;
 
    FILE_IDX++;
}
 
#
# 查找某字符串在另一字符中出现的最后一次位置
#
function last_index(strsrc, strsub){
    idx = index(strsrc, strsub);
    if (idx != 0){
        return idx + last_index(substr(strsrc, idx + 1), strsub);
    }else{
        return 0;
    }
}
'
 
# 完成

使用前修改脚本内容,将FTP_LINK="182ng"中的182ng修改为UE中FTP的连接名称。建议名称尽量短小,以减少最终生成的项目文件的体积。

UE FTP设置

将脚本文件放到代码的最上级目录,执行chmod +x ue_prj.sh添加可执行权限,执行ue_prj.sh > openboss.prj,即可生成该目录下所有文件组织成的UE工程,下载至Windows中即可用UE打开,效果如下:

UE打开工程

注意:

  • 生成项目前先up一下代码,保证生成的项目是最新的
  • 对曾经编译的模块,最好gmake clean_all一次,避免中间文件也加入项目中

Posted in 班门弄斧.

Tagged with , , , .


4 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. 小败败 says

    bolg 还是有更新的嘛。。呵呵。。现在还在华为吗?

  2. cpiz says

    已经转移了, 人太懒散, 习惯不了压抑

  3. manni says

    好久没来,祝你来年一切顺利

  4. www.emifilplast.com says

    Даже и не докопаешься.



Some HTML is OK

or, reply to this post via trackback.