源码阅读工具-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使用教程

首先我们需要创建一个新项目,输入一个项目名称,然后选择一个项目位置。

image-20210529131110261

image-20210529131151080

这里我们选择项目的根目录。

现在我们需要在项目中添加至少一个源组,每个sourcetrail项目都包含一个或多个元组。来源组定义一组文件以及用于正确索引他们的其他信息。

image-20210529132124230

编译数据库,是最简单的方法,编译数据库是JSON文件,包含代码库中所有源文件和所有文件的列表,建立它们的必要信息。

我们可以得到这个JSON文件,通过从CMake使用C_MAKE_EXPORT_COMPILE_COMMANDS标志。添加该标志并重新运行CMake后,就可以看到该compile_commands.json文件。

image-20210529132328564

该json文件包含一个列表,所有源文件以及有关如何构建他们的所有信息,如果无法生成,还有其他方式生成。在MacOS或Linux上,可以尝试使用Bear或Build EAR以模拟创建编译数据库文件,如果在windows上使用Visual Studio,则可以使用sourtrail extension拓展来导出我们的 编译数据库。

image-20210529132547056

接下来点击创建,然后等待一会出现Finished Indexing就完成了。

image-20210529154141538