19

自从ccache在我们的 CI 服务器上使用以来,我们发现构建时间方面的瓶颈现在是我们的静态分析通道,它使用clang-tidy. 有谁知道以clang-tidy类似于ccache使用常规编译器的方式加速的方法?

4

3 回答 3

2

我在这里发现了另一个重要的细节:

https://gitlab.kitware.com/cmake/cmake/-/merge_requests/1791/diffs

在这里使用:

https://reviews.bitcoinabc.org/D5150?id=15995

因此,为了能够在使用集成 clang-tidy 时缓存编译器的输出: set(CMAKE_CXX_CLANG_TIDY ...

方法你需要使用COMPILER_LAUNCHER方法来配置ccache

find_program(CCACHE ccache)
if(CCACHE)
    set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE})
    set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE})
endif(CCACHE)

而不是启动器规则方法:

find_program(CCACHE ccache)
if(CCACHE)
    set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE})
    set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE})
endif(CCACHE)
于 2020-07-16T12:10:30.370 回答
1

clang-tidy-cache虽然我不知道它是如何与 ccache 一起工作的。

于 2020-02-01T11:24:46.057 回答
0

最后,我找到了一个解决方案:它将构建系统切换到bazel。bazel 是一个非常通用的构建系统,它定义了一个动作图。基本上每个动作都有一组输入和输出。根据输入,可以缓存输出。因此,bazel 从根本上解决了问题。

可以在此处找到以可缓存方式集成 clang-tidy 的必要规则:https ://github.com/erenon/bazel_clang_tidy

为了使用缓存,您需要设置远程缓存。这可以使用 docker-compose 脚本来完成。必要的 docker 容器已经存在。让它运行的命令可以在这里找到:https ://github.com/buchgr/bazel-remote/

最后,bazel还解决了链接阶段结果的缓存问题。

不仅如此,bazel 还允许构建其他语言,例如 java。因此,在复杂的项目中,它允许用单个构建系统替换所有其他构建系统。

最后,bazel 还允许在集群上并行构建。

最后但同样重要的是,您可以定义多个平台工具链。总而言之,这允许进行跨平台构建。

于 2022-01-06T15:47:50.487 回答