如何将clang-tidy与llvm-project解耦并构建独立项目?
独立clang-tidy项目构建的优化方案
方案一:用官方预编译LLVM包+CMake自动配置
- 直接下载对应平台的LLVM预编译二进制包(包含完整头文件、共享库和CMake配置模块)
- 在你的clang-tidy项目CMakeLists.txt里,用
find_package(LLVM REQUIRED CONFIG)自动导入所有必要的路径和依赖,不用手动写include_directories和link_directories - 示例配置:
cmake_minimum_required(VERSION 3.18) project(lightweight-clang-tidy) # 自动导入LLVM配置 find_package(LLVM REQUIRED CONFIG) include_directories(${LLVM_INCLUDE_DIRS}) link_directories(${LLVM_LIBRARY_DIRS}) add_definitions(${LLVM_DEFINITIONS}) # 添加clang-tidy源码编译目标 add_executable(lightweight-clang-tidy src/ClangTidyMain.cpp [其他核心源码文件]) # 链接必要的LLVM/Clang库 target_link_libraries(lightweight-clang-tidy PRIVATE clangTidy clangTidyCore clangASTMatchers clangTooling LLVMSupport )
- 好处:不用自己编译整个llvm-project,直接用官方现成资源,构建快,配置简单。
方案二:抽离clang-tidy核心代码+用llvm-config动态适配
- 从llvm-project仓库里只复制
clang-tools-extra/clang-tidy的核心源码,以及通过llvm-config --includedir确认的必要头文件 - 写自定义CMakeLists.txt,用
llvm-config工具自动获取编译和链接参数,避免硬编码路径:
cmake_minimum_required(VERSION 3.18) project(lightweight-clang-tidy) # 调用llvm-config获取所有编译链接参数 execute_process( COMMAND llvm-config --cxxflags --includedir --libdir --ldflags --system-libs --libs clang-tidy clangTooling clangASTMatchers OUTPUT_VARIABLE LLVM_PARAMS OUTPUT_STRIP_TRAILING_WHITESPACE ) string(REPLACE " " ";" LLVM_PARAM_LIST ${LLVM_PARAMS}) # 添加源码并应用参数 add_executable(lightweight-clang-tidy src/ClangTidyMain.cpp [其他核心源码文件]) target_compile_options(lightweight-clang-tidy PRIVATE ${LLVM_PARAM_LIST}) target_link_options(lightweight-clang-tidy PRIVATE ${LLVM_PARAM_LIST})
- 好处:彻底和整个llvm-project仓库解耦,
llvm-config会自动适配当前环境的LLVM版本,兼容性拉满。
方案三:llvm-project模块化编译(仅构建必要组件)
- 如果必须从源码构建,用CMake参数指定只编译clang-tidy和它依赖的最小组件,大幅缩短编译时间:
cmake -S llvm-project/llvm -B build \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" \ -DLLVM_TARGETS_TO_BUILD="X86" # 换成你需要的目标平台 -DLLVM_BUILD_SHARED_LIBS=ON # 生成共享库方便后续链接
- 编译完成后,从
build目录里提取include(头文件)、lib(共享库)和clang-tidy源码,就能独立构建你的轻量项目 - 好处:比全量编译llvm-project快很多,还能拿到最新的clang-tidy代码。
内容的提问来源于stack exchange,提问作者Rahn
相关产品推荐
相关产品推荐

