源码阅读工具-sourcetrail的使用
基本原理是通过生成 cmake生成compile_commands.json
这个文件记录了所有C++文件的编译指令
cmake项目采用如下指令:
1 | cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 |
非cmake项目,如 Visual Studio 有官方的插件,其它 IDE 也有相应的官方插件。
- 根据 compile_commands.json 中的条目,逐一解析索引相关 C++ 源文件,收集所有信息存储在本地数据库中,并生成全文索引信息。
- 根据查询需求,展示所有相关信息。
注意事项
由于 compile_commands.json 中是没有头文件的编译指令的,因此所有需要索引的头文件(或者包含头文件的目录)都需要在项目设置中手动指定。
幸而它会递归搜索所有子目录,所以只要设置根目录就可以了。当然还可以根据需要,逐个添加部分自己感兴趣的目录。
毕竟文件越多,索引的越慢。
由于其索引器是静态链接 clang 的相关库,所以一些 Visual Studio 特有的编译参数(/ 开头)并不支持,这其实并不影响索引,手动移除即可。
对项目设置额外的编译器参数 -driver=cl 并不起作用。
如果项目启用了合并编译,则一些源文件会标记为 ExcludeFromBuild,这些文件就不会出现在 compile_commands.json,也就不会被索引。自己想办法替换成原始的文件吧。
ubuntu下leveldb的安装与编译测试
1.源码下载
git clone –recurse-submodules https://github.com/google/leveldb.git
下载完成之后,在当前目录会有一个leveldb的文件夹。
2.编译安装
cd leveldb //进入leveldb目录
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release .. && cmake –build .
1 | cmake -DCMAKE_EXPORT_COMMANDS=1 -DCMAKE_BUILD_TYPE=Release .. &&cmake --build . |
cmake生成用于sourcetrail的json文件
编译完成之后,leveldb/build/目录下生成了一个静态库libleveldb.a,将这个静态库复制到/usr/local/lib/, 并把leveldb相关的头文件复制到/usr/local/include/
sudo cp build/libleveldb.a /usr/local/lib/
sudo cp -r include/leveldb/ /usr/local/include/
至此就安装完成啦,下面开始测试。
sourcetrail使用教程
首先我们需要创建一个新项目,输入一个项目名称,然后选择一个项目位置。
这里我们选择项目的根目录。
现在我们需要在项目中添加至少一个源组,每个sourcetrail项目都包含一个或多个元组。来源组定义一组文件以及用于正确索引他们的其他信息。
编译数据库,是最简单的方法,编译数据库是JSON文件,包含代码库中所有源文件和所有文件的列表,建立它们的必要信息。
我们可以得到这个JSON文件,通过从CMake使用C_MAKE_EXPORT_COMPILE_COMMANDS标志。添加该标志并重新运行CMake后,就可以看到该compile_commands.json文件。
该json文件包含一个列表,所有源文件以及有关如何构建他们的所有信息,如果无法生成,还有其他方式生成。在MacOS或Linux上,可以尝试使用Bear或Build EAR以模拟创建编译数据库文件,如果在windows上使用Visual Studio,则可以使用sourtrail extension拓展来导出我们的 编译数据库。
接下来点击创建,然后等待一会出现Finished Indexing就完成了。