编译数据库(CDB)JSON文件


文档摘要

编译数据库(CDB)是一个JSON文件,指定了代码库中每个源文件应该如何编译。这个JSON文件通常命名为compilecommands.json,位于项目的根目录中。提供了构建过程中所有编译器调用的机器可读记录,通常用于各种工具用于更准确的分析、重构等。这个JSON文件中的每个条目通常包含以下字段: directory: 编译的工作目录。 command: 实际的编译命令,包括编译器选项。 arguments: 另一个可以用来指定编译参数的字段,包含参数列表。 file: 正在编译的源文件的路径。 output: 此编译步骤创建的输出的路径。 从字段描述中我们可以看到,有两种方法可以指定编译标志:使用command字段或arguments字段。

编译数据库(CDB)是一个JSON文件,指定了代码库中每个源文件应该如何编译。这个JSON文件通常命名为compile_commands.json,位于项目的根目录中。提供了构建过程中所有编译器调用的机器可读记录,通常用于各种工具用于更准确的分析、重构等。这个JSON文件中的每个条目通常包含以下字段:

  • directory: 编译的工作目录。

  • command: 实际的编译命令,包括编译器选项。

  • arguments: 另一个可以用来指定编译参数的字段,包含参数列表。

  • file: 正在编译的源文件的路径。

  • output: 此编译步骤创建的输出的路径。

从字段描述中我们可以看到,有两种方法可以指定编译标志:使用command字段或arguments字段。来看一个具体的例子,假设C++文件ProjectLib.cpp位于/home/user/project/src/lib文件夹,并且可以使用以下调用命令用Clang进行编译(命令仅作为示例,可以忽略其参数的含义):

` cd /home/user/project/src/lib` clang -Wall -I../headers ProjectLib.cpp -o ProjectLib.o

以下CDB可以用来表示该命令:

图 9.1:ProjectLib.cpp 的编译数据库

在示例中使用了command字段。我们也可以以另一种形式创建CDB,并使用arguments字段。结果如下:

图 9.2:ProjectLib.cpp 的CDB

图 9.2 中的CDB表示与图 9.1
中相同的编译配置,但它使用参数列表(arguments字段)而不是图 9.1
中使用的调用命令(command字段)。参数列表也包含了可执行文件clang作为其第一个参数,CDB处理工具可以使用这个参数,来决定在存在不同编译器的环境中,应该使用哪个编译器进行编译,比如GCC与Clang。

提供的CDB示例仅包含一个文件的一条记录,一个真实的项目可能包含数千条记录。LLVM就是一个很好的例子,如果查看用于LLVM构建的构建文件夹(见第1.3.1节,使用CMake的配置),可能会注意到它包含一个compile_commands.json文件,其中包含了我们选择构建的项目的CDB。值得注意的是,LLVM默认创建CDB,但我们自己的项目可能需要一些特殊操作来创建它。

让我们看看如何创建CDB。


作者与出处
原作者: xiaoweiChen
来源:xiaoweiChen
许可证:Apache-2.0
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: xiaoweiChen 转发
评论区 (0)
U