[英]Is it possible to accelerate clang-tidy using ccache or similar?
由於在我們的 CI 服務器上使用ccache
,我們發現構建時間方面的瓶頸現在是我們的靜態分析通道,它使用了clang-tidy
等工具。 有沒有人知道一種以類似於ccache
使用常規編譯器的方式加速clang-tidy
的方法?
有clang-tidy-cache雖然我不知道它是如何與 ccache 一起工作的。
我在這里發現了另一個重要細節:
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)
最后,我找到了一個解決方案:它將構建系統切換到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 還允許在集群上並行構建。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.