CMake如何在文件无变更时跳过LLVM构建的配置步骤
CMake 跳过重复配置的实现方案
核心结论
CMake 本身没有原生的 --only-if-not-configured 类参数,但可以通过两种方案实现仅在未配置时执行配置步骤的需求,特别适配你在CI中构建LLVM的场景:
方案1:脚本判断缓存文件,直接跳过配置
CMake 完成配置后会在构建目录生成CMakeCache.txt文件,只要该文件存在且你的配置参数没有变更,就不需要重新执行配置步骤。你可以在bat脚本中加一层文件存在性判断:
@echo off set "BUILD_DIR=%BUILD_FOLDER%\llvm" :: 仅当构建目录不存在或缓存文件不存在时执行配置 if not exist "%BUILD_DIR%\CMakeCache.txt" ( cmake -G"Visual Studio 16 2019" ^ -DBUILD_SHARED_LIBS=Off ^ -DLLVM_INCLUDE_TESTS=Off ^ -DLLVM_ENABLE_DIA_SDK=1 ^ -DCMAKE_BUILD_TYPE=Release ^ -DLLVM_ENABLE_LIBCXX=OFF ^ -DLLVM_BUILD_LLVM_C_DYLIB=ON ^ -DLLVM_POLLY_LINK_INTO_TOOLS=ON ^ -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON ^ -DLLVM_LINK_LLVM_DYLIB=ON ^ -DLLVM_ENABLE_EH=ON ^ -DLLVM_ENABLE_FFI=OFF ^ -DLLVM_ENABLE_RTTI=ON ^ -DLLVM_INCLUDE_DOCS=OFF ^ -DLLVM_INCLUDE_TESTS=OFF ^ -DLLVM_INSTALL_UTILS=ON ^ -DLLVM_ENABLE_Z3_SOLVER=OFF ^ -DLLVM_OPTIMIZED_TABLEGEN=ON ^ -DLLVM_TARGETS_TO_BUILD=all ^ -DLLDB_USE_SYSTEM_DEBUGSERVER=ON ^ -DLLDB_ENABLE_PYTHON=OFF ^ -DLLDB_ENABLE_LUA=OFF ^ -DLLDB_ENABLE_LZMA=ON ^ -DLLDB_INCLUDE_TESTS=OFF ^ -DLIBOMP_INSTALL_ALIASES=OFF ^ -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;mlir;polly" ^ -DLLVM_ENABLE_RUNTIMES="compiler-rt" ^ -DCMAKE_INSTALL_PREFIX=%INSTALL_FOLDER%\llvm ^ -Thost=x64 ^ -B %BUILD_DIR% ^ -S %SOURCE_FOLDER%\llvm-project-llvmorg-12.0.1\llvm ) :: 直接执行构建,不会触发重复配置 cmake --build %BUILD_DIR% --config Release --target install
注意
你当前的配置命令中重复定义了LLVM_TARGETS_TO_BUILD参数(先后赋值为X86和all),CMake会以最后一次赋值为准,重复的参数会拖慢配置校验速度,建议删除冗余定义。
方案2:使用CMake构建命令自动触发配置
你可以不用单独执行配置步骤,直接调用cmake --build命令,CMake会自动检测构建目录的配置状态:如果没有配置过会先执行配置,已经配置完成且参数无变更的话,直接进入构建环节,不会重复执行配置步骤。
:: 首次执行自动完成配置+构建,后续执行仅走构建流程 cmake --build %BUILD_FOLDER%\llvm --config Release --target install
Windows配置速度优化补充
Windows平台Visual Studio生成器的配置速度本身慢于Linux的Makefile/Ninja生成器,你也可以改用Ninja生成器进一步加快配置和构建速度:
- 先安装Ninja并加入系统PATH
- 配置命令修改生成器为
-G"Ninja",同时提前配置好MSVC编译环境,配置速度可以缩短到1分钟以内。
内容的提问来源于stack exchange,提问作者Tomaz Canabrava
相关产品推荐
相关产品推荐

