文档章节

emacs里用ebrowse解析已有的c++工程

小保哥
 小保哥
发布于 2017/05/20 14:19
字数 790
阅读 48
收藏 0

在emacs.exe同级目录下能找到ebrowse.exe,但是在eshell里在C++工程目录下运行ebrowse时,提示找不到ebrowse程序。

  • 这个神奇的问题,我真不知道如何解释。用$(expand-file-name "ebrowse.exe" invocation-directory)这条命令可以解决这个问题。直接在eshell里输入这条命令,空格后输入--help可以看到ebrowse的帮助文档。  

在网上找了这么一条命令,但对我无效。

ebrowse $(find . -name "*.[hc]pp")

 

  • 这个我纠结了很久,碰到了各种问题。首先$()这种语法在eshell里是被当做elisp代码直接执行的,所以命令里的find被eshell里认为是一个elisp函数。可是总是报FIND语法不正确、拒绝访问、某某文件打不开等等各种错,越改错越多。然后我想到这个find函数可能只是调用本机的现成的find程序来做find任务的,因此直接将这条find命令在eshell里执行,还是报刚才那些奇怪的错。然后,在dos窗口下运行同样的命令,报了同样的错。很明显,elisp里的这个find函数调用了Windows系统的find命令,这不是我想要的,因为我对这条命令特别不熟,不知道怎么让它给我找出文件名符合特定规则的所有文件。于是,我用Git Bash里的find做了这件事:find . -type f -regex ".*\.[hc]+[xp]*" -fprint srcfile_names.txt在Git Bash里执行这条命令,可以将所有文件名后缀是.h/.c/.cc/.hpp/.hxx/.cpp/.cxx的C++代码文件名写入到srcfile_names.txt文件中。如果不区分后缀大小写,可以用-iregex代替-regex选项。总之,一番漫无目的之后,我得到了包含所有C++项目源代码文件路径列表的文本文件。我原先本想直接将这些文件名输出到stdin然后让ebrowse读取,但是ebrowse又报错,说我提供的文件列表太长,它处理不了。 

ebrowse路径问题搞定了,待解析的代码文件路径列表也搞定了,可是最后用ebrowse -f"srcfile_names.txt"解析时,又报错,说ebrowse无写BROWSE文件的权限。 

  • 不想再折腾文件或路径权限问题了。直接用ebrowse -f"srcfile_names.txt" -o"D:/xxx/UE4.10-BROWSE" 命令搞定。-o参数表示把解析结果写入到指定的文件中。解析完成后,记得把BROWSE文件拷贝到执行这条解析命令时的路径下。

整个解析问题就搞定了。这中间折腾了很久,碰到了远超过上面说的这些问题,各种报错,最后毕竟还是搞定了。其中,ebrowse.exe可以直接从emacs目录拷贝到其他地方去使用,没有必要像我这里expand-file-name搞那么复杂,想从哪个目录解析,就把ebrowse.exe拷贝到哪个目录就行了。 用emacs打开分析结果时,直接像打开普通文件一样C-x C-f定位到刚才的UE4.10-BROWSE文件即可自动用Tree模式打开。

© 著作权归作者所有

共有 人打赏支持
下一篇: emacs-line-wrap
小保哥
粉丝 7
博文 40
码字总数 38886
作品 0
朝阳
程序员
私信 提问
从vim转向Emacs _ emacser.com文章收集

在Emacs中使用gdb调试程序 http://emacser.com/emacs-gdb.htm 1 引言 Emacs除了具有强大的编辑功能,还可以作为调试工具gdb的前端,对程序进行调试。使用Emacs进行调试,可以将程序的编写与调...

AlphaJay
2012/05/04
0
0
我的vim和emacs配置文件

vimrc: 使用的插件:使用clangcomplete对项目编译附加参数或者自定义的头文件或库目录需要添加到当前文件夹下的.clangcomplete文件中 YouCompleteMe补全C/C++可能需要编译生产libclang.so,...

cnsworder
2014/01/13
0
0
warning LNK4042: 对象被多次指定;已忽略多余的指定

这个warning后面经常伴随 “LNK2019: 无法解析的外部符号”。不要忽略这个warning 1、把报LNK4042的.h和.cpp从项目中排除 2、重新加入排除的.h和.cpp 原因: 1. 如果在属性窗口修改了文件的设...

guoliang
2014/04/01
0
0
Emacs C++智能提示

Emacs中的C++程序智能提示是个不容易的活。我使用的是auto-completion插件。该插件依赖clang编译器进行代码分析,当然还依赖其他的emacs插件。下面是我的Emacs配置文件。 需要提示的时候,就...

长平狐
2012/08/28
454
0
亚马逊工程师论各种编程语言的优缺点

这是我写的旋风式的编程语言简介 ,我会讲C、C++、Lisp、Java、Perl (我们在亚马逊用到的所有语言)、Ruby (我就是喜欢) 和 Python,把 Python 加进来是因为 —— 好吧,你看了就知道了,现在...

oschina
2016/06/19
14.5K
130

没有更多内容

加载失败,请刷新页面

加载更多

Spring学习记录

Java类定义配置 @Configuration //标记为配置类@ComponentScan //标记为扫描当前包及子包所有标记为@Component的类@ComponentScan(basePackageClasses = {接口.class,...}) //标记为扫描当...

CHONGCHEN
今天
1
0
如何开发一款以太坊(安卓)钱包系列2 - 导入账号及账号管理

这是如何开发一款以太坊(安卓)钱包系列第2篇,如何导入账号。有时用户可能已经有一个账号,这篇文章接来介绍下,如何实现导入用户已经存在的账号。 导入账号预备知识 从用户需求上来讲,导...

Tiny熊
今天
3
0
intellJ IDEA搭建java+selenium自动化环境(maven,selenium,testng)

1.安装jdk1.8; 2.安装intellJ; 3.安装maven; 3.1 如果是单前用户,配置用户环境变量即可,如果是多用户,则需配置系统环境变量,变量名为MAVEN_HOME,赋值D:\Application\maven,往path中...

不最醉不龟归
今天
4
0
聊聊ShenandoahGC的Brooks Pointers

序 本文主要研究一下ShenandoahGC的Brooks Pointers Shenandoah Shenandoah面向low-pause-time的垃圾收集器,它的GC cycle主要有 Snapshot-at-the-beginning concurrent mark包括Init Mark(P......

go4it
昨天
4
0
Makefile通用编写规则

#简单实用的Makefile模板: objs := a.o b.o test:$(objs) gcc -o test $^ # .a.o.d .b.o.d dep_files := $(foreach f,$(objs),.$(f).d) dep_files := $(wildcard $(dep_files)) ifneq ($(d......

shzwork
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部