在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模式打开。