用于为基于make的构建系统生成clang json编译数据库文件的工具。

compiledb的Python项目详细描述


编译数据库生成器

CircleCI branchPyPIPyPI - Python VersionGitHub

为gnu生成Clang's JSON Compilation Database文件的工具 ^基于{}的构建系统。

主要针对非cmake(cmake已经生成编译数据库) 大型代码库。受YCM-GeneratorBear等项目启发, 但是速度更快(主要是大型项目),因为在大多数情况下,不需要清除 构建(如上述工具所做)以生成编译数据库文件 为此,它使用make选项,如-n/--dry-run-k/--keep-going。 提取编译命令。而且,它比交叉编译友好 ycm生成器的假toolchanin方法。

安装

# pip install compiledb
  • 支持Python2.x和3.x(目前只测试2.7和3.6版本)
  • 对于bash完成支持,添加sh-completion/compiledb.bash文件的内容 例如,.bashrc文件。
  • zsh即将完成:)

用法

compiledb提供了一个makepython包装脚本,除了执行make build命令,更新与该生成对应的json编译数据库文件, 生成类似于Bear的命令行接口。

要使用compiledb的“make wrapper”脚本生成compile_commands.json文件, 执行makefile目标all

$ compiledb make

compiledb将在make子命令之后传递的所有选项/参数转发给gnu make, 例如,可以使用core/main.mk生成compile_commands.json 作为主生成文件(-f标志),从build目录(-C标志)启动生成:

$ compiledb make -f core/main.mk -C build

默认情况下,compiledb make生成编译数据库并运行实际生成 命令请求(作为make包装器),可以使用-n跳过生成步骤。 或--no-build选项。

$ compiledb -n make

compiledb基本命令的设计使其可以用于分析编译命令 从任意文本文件(或stdin),假设它有一个构建日志(理想情况下使用 make -Bnwk命令),并生成相应的json编译数据库。

例如,要从build-log.txt文件生成编译数据库,请使用以下命令 命令。

$ compiledb --parse build-log.txt

或其等价物:

$ compiledb < build-log.txt

甚至,将make的输出管道化,并将编译数据库打印到标准输出:

$ make -Bnwk | compiledb -o-

默认情况下,compiledb在“参数”列表中生成一个json编译数据库 format。“命令”字符串 通过使用--command-style标志也支持格式:

$ compiledb --command-style make

测试/贡献

我实现这个工具是因为我需要为一些AOSP模块编制索引,以便导航 以及学习目的(在使用现有工具没有令人满意的结果后 时间,例如YCM-GeneratorBear)。所以我重新设计了ycm生成器 在compiledb/parser.py的初始版本中,并成功用于生成 compile_commands.json对于在Docker容器中运行约1分钟的某些aosp模块,然后 可以与一些很棒的工具一起使用,例如:

注意:

  • windows:使用cmd、wsl(ubuntu)、mingw32在windows 10上测试
  • linux:到目前为止,只在arch linux和ubuntu 18上测试过
  • mac:在macos 10.13和10.14上测试

欢迎使用修补程序:)

许可证

GNU GPLv3

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用php调用java web服务时无法获取输出   java Netbeans:安装IMlet时出错。。。。仿真器错误   初始化期间Eclipse Juno SR 2中的java堆栈溢出   java在3d中寻找两个任意立方体的交集   代码中显示java“org.openqa.selenium.WebDriverException”错误   java使用AtomicInteger作为可变整数的替代品是一种好的做法吗?   当以编程方式设置背景颜色时,java版面在更新后会自动复制   java将字符串拆分为一个带有数字数据的字符串和另一个带有非数字数据的字符串   带有SSL协议的java AsyncHttpClient   C++服务器HTTN到java NtoHS客户端转换   java内存分配是基于引用类还是实例类?   java使用ProjectLombok安全吗?   grails“java版本”在命令提示符下不工作   java无法使用axis2实例化类型ADBDataSource   在Play Framework 2中进行多文件上传的java示例   java如何将二进制补码字符串转换为负十进制数?   windows 7在Java中获取不正确的操作系统名称   java如何禁用p:commandButton的enter键?   java如何从main方法加载servlet   java如何从imageView获取二进制位图