返回信息流浏览Paddle C++源码
更多技术欢迎来http://bbs.jointforce.com/topic/20790
在用了五年Go之后,为了浏览Paddle的源码,我重新琢磨如何浏览C++项目的源码。琢磨的结果在 这里。选择工具在这个Stackoverflow帖子里,大家建议了不少工具。但是基本上大多数建议的upvote都是0。说明其实很多工具都不好用。我记得很多年前Source Insight的用户挺多的。我一直没有用是因为其字体设置实在是太难看了。我用过ctags和cscope,都是经典工具,都可以和Emacs、Vim合用。但是这俩都不是严格按照C++语法来解析源码,并建立索引的。想到最新的科技成果LLVM/Clang衍生出了C++源码的解析工具,我放狗搜了一下,果然有一个工具 woboq codebrowser 利用LLVM/Clang深度解析C++源码并建立索引。试用之后,感觉很满意。
woboq codebrowserwoboq codebrowser的文档里没有解释其工作原理。这里补上。woboq codebrowser是一个C++写的命令行工具,它调用LLVM解析任何一个C++项目的所有源码,然后输出一组HTML文件以及对应的Javascript源码。随后我们可以把这组HTML文件拷贝到某个Web服务器上,就可以在浏览器里浏览C++项目的源码了。比如可以用鼠标点击任何一个symbol,即可跳转到symbol的声明或者定义所在的位置。
为了能解析源码,woboq codebrowser需要知道源码编译的步骤。这些步骤不仅列出了需要关注的源码文件,而且会真的被woboq codebrowser调用的LLVM/Clang执行,从而做宏替换(macro execution)之类的预编译工作,从而得到完备的源码。如果一个C++项目恰好是用CMake来组织的,那么恭喜你,只需要给cmake命令加一个参数,就可以得到这个“编译步骤”,并保存到一个叫compile_commands.json的文件里,方便woboq codebrowser读取。
以下是用woboq codebrowser检索和浏览Paddle的过程。
编译woboq codebrowserwoboq codebrowser支持MacOSX和Linux。Paddle目前只支持Linux。以下步骤都在一个Ubuntu 14.04 VirtualBox VM里进行。
首先安装libclang。这是woboq codebrowser用来解析源码用的。
sudo apt-get updatesudo apt-get install clang-3.8 llvm-3.8 libclang-3.8-dev
随后下载和编译woboq codebrowser
git clone https://github.com/woboq/woboq_codebrowsercd woboq_codebrowsercmake . -DLLVM_CONFIG_EXECUTABLE=/usr/bin/llvm-config-3.8 -DCMAKE_BUILD_TYPE=Releasemake -j12
编译Paddle按照Paddle文档里的建议,安装以下软件:
sudo apt-get updatesudo apt-get install -y g++ make cmake build-essential libatlas-base-dev python python-pip libpython-dev m4 libprotobuf-dev protobuf-compiler python-protobuf python-numpy gitsudo apt-get install libgoogle-glog-dev libgflags-dev libgtest-devsudo pip install wheelpushd /usr/src/gtestcmake . && makesudo cp *.a /usr/libpopd
下载Paddle源码。调用cmake时加上-DCMAKE_EXPORT_COMPILE_COMMANDS=ON,这样除了做编译准备,cmake还会输出compile_commands.json,供woboq codebrowser使用:
git clone https://github.com/baidu/paddlecd paddlecmake . -DWITH_GPU=OFF -DWITH_DOC=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
随后编译Paddle。这一步是必须的,因为这个编译过程做一些m4替换生成.proto文件,并且从.proto文件生成对应的C++源码文件。如果我们不做这一步,那么woboq codebrowser会报错说有一些C++源码文件找不到。make
解析和浏览Paddle
接下来,我们就可以用woboq codebrowser解析Paddle源码,并生成HTML文件了:
OUTPUTDIRECTORY=/vagrant/paddle_html/codebrowserDATADIRECTORY=$OUTPUTDIRECTORY/../data
BUILDIRECTORY=$PWD
VERSION=`git describe --always --tags`
/vagrant/woboq_codebrowser/generator/codebrowser_generator -b $BUILDIRECTORY -a-o
$OUTPUTDIRECTORY -p codebrowserBUILDIRECTORYVERSION/vagrant/woboq_codebrowser/indexgenerator/codebrowser_indexgenerator $OUTPUTDIRECTORYcp -rv /vagrant/woboq_codebrowser/data $DATADIRECTORY
最后,我把 /vagrant/paddle_html 目录scp到租用的一台VPS上,并且在VPS上安装了nginx,就得到了文首的链接。
这是一条镜像帖。来源:北邮人论坛 / cpp / #93454同步于 2016/9/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[转载]浏览Paddle C++源码
Hrchang
2016/9/19镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复