gpt4 book ai didi

lint - Bazel 跳棋支持

转载 作者:行者123 更新时间:2023-12-03 19:38:25 27 4
gpt4 key购买 nike

Bazel 提供哪些选项来创建新的或扩展调用 C/C++ 代码检查器的现有目标,例如

  • 质检
  • cppcheck
  • iwyu

  • ?

    我需要使用 genrule还是有其他一些目标规则?

    https://bazel.build/versions/master/docs/be/extra-actions.html我在这里唯一可行的选择?

    在航空和汽车等安全关键软件行业,使用这些调用的结果来收集所谓的“度量报告”是很常见的。

    在这些情况下,对此类 linter 的调用必须具有由这些指标报告收集器的构建操作进一步处理的输出。在这种情况下,我找不到重用 Bazel 的“额外操作”的有用方法。任何想法?

    最佳答案

    我写了一些东西,它使用额外的 Action 来生成 compile_commands.json clang-tidy 和其他工具使用的文件,当我开始使用它时,我想为 iwyu 做同样的事情。我没有使用过其他工具,但我认为它们也符合相同的模式。

    基本思想是运行一个额外的操作,为每个文件生成一些输出(也称为 C/C++ 编译命令),然后找到所有输出文件(在 Bazel 之外)并聚合它们。一个相当完整的例子是here以供引用。基本上, Action 监听器(用 Python 编写)解码额外的 Action 原型(prototype)并提取源文件、编译器选项等:

    action = extra_actions_base_pb2.ExtraActionInfo()
    with open(argv[1], 'rb') as f:
    action.MergeFromString(f.read())
    cpp_compile_info = action.Extensions[extra_actions_base_pb2.CppCompileInfo.cpp_compile_info]
    compiler = cpp_compile_info.tool
    options = ' '.join(cpp_compile_info.compiler_option)
    source = cpp_compile_info.source_file
    output = cpp_compile_info.output_file
    print('%s %s -c %s -o %s' % (compiler, options, source, output))

    如果您给额外的操作一个 output template ,然后它可以将该输出写入文件。如果您为输出文件提供独特的名称,您可以在输出树中找到它们并根据需要将它们合并在一起。

    更复杂的选项是使用 bazel 查询 --output=proto并编写代码以从那里计算您感兴趣的目标的额外操作输出文件名。这需要编写更多代码,但是您不会遇到输出树中在聚合时意外包含的旧输出文件的问题。

    FWIW, Aspects是另一种可能。但是,我认为额外的行动对此是可以接受的。

    关于lint - Bazel 跳棋支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44342503/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com