Ninja: 功能请求:compdb 工具中更灵活的规则名称匹配

创建于 2015-09-20  ·  12评论  ·  资料来源: ninja-build/ninja

目前,要使用 compdb 工具,您需要知道要查询的规则的确切名称。 如果这些名称是可预测的,这可以正常工作,但某些生成器的情况不一定如此。

最值得注意的是,在 3.2 版中(我认为)CMake 的 ninja 生成器已经开始生成<lang>_COMPILER__<directory>形式的规则。 这意味着为了查询编译数据库,您需要先扫描项目目录树,或者求助于其他hacks。 3.2 之前的 CMake 生成<lang>_COMPILER形式的规则,这使得它们可以从通用工具进行查询 - 无需特定的项目知识。

因此,此功能请求是为了更灵活地将规则名称与命令行参数进行匹配。 最小有用的实现将允许仅前缀匹配。 或者,正则表达式匹配也很有用。

最有用的评论

我发现 compdb 工具很难使用——对我来说,令人惊讶的是它需要一个规则列表(我花了一段时间才弄明白)。 也许如果没有明确通过明确的规则,那可能只是意味着“所有规则”? 这对于基于 cmake 的构建是否足够?

(无关:我认为您可以将CMAKE_EXPORT_COMPILE_COMMANDS传递给 cmake,让它直接编写编译数据库。)

所有12条评论

过去有一个“规则”工具(7b67e48a1479c6fc7326c55756088bd57d64fc82)可以打印所有规则的列表。 有了这个工具,我们可以做这样的事情:

ninja -t compdb `ninja -t rules | grep 'CXX_COMPILER_'`

我认为复活这个工具是个好主意,因为它也可以帮助编写 shell 完成脚本。 我将在接下来的几天内尝试这样做。

这也行,谢谢。

我发现 compdb 工具很难使用——对我来说,令人惊讶的是它需要一个规则列表(我花了一段时间才弄明白)。 也许如果没有明确通过明确的规则,那可能只是意味着“所有规则”? 这对于基于 cmake 的构建是否足够?

(无关:我认为您可以将CMAKE_EXPORT_COMPILE_COMMANDS传递给 cmake,让它直接编写编译数据库。)

这里有人吗? 🙂

规则工具似乎从构建中删除了?

这真的很有帮助。

我喜欢@nico的建议,默认情况下只打印所有规则。 如果需要,将来可以添加更复杂的东西(如通配符匹配)。

我注意到@sarcasm在这里建议的解决方法相当丑陋,在 ninja 本身中激发了更漂亮的解决方案:)

现在有 #1377 用于默认转储所有规则。

想在这里添加一个小注释,似乎对于某些 CMake 项目 [0], ninja -t compdb (无参数)不会转储任何内容(输出是一个空列表[] )。

cmake -G Ninja .
ninja -t compdb
[
]

但是,按照 nico 的建议使用CMAKE_EXPORT_COMPILE_COMMANDS将:

cmake -G Ninja . -DCMAKE_EXPORT_COMPILE_COMMANDS=1
ninja -t compdb
[
]

ninja -t compdb仍然返回空,但 compile_commands.json 已经生成。

谢谢尼哥!

[0] 对于Binaryen至少

ninja --version说什么?

1.8.2,顺便说一句,这个忍者来自depot_tools

该版本缺失 #1377。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

nico picture nico  ·  20评论

gjasny picture gjasny  ·  10评论

zmike picture zmike  ·  4评论

Alexander-- picture Alexander--  ·  20评论

gioragutt picture gioragutt  ·  9评论