如何加速使用vcpkg清单模式的CMake项目构建过程?
加速CMake+Vcpkg清单模式构建速度的方法
从你的构建输出看,Vcpkg包安装阶段耗时极短(仅9.98微秒),瓶颈在CMake的配置阶段(耗时25.4秒)。以下是针对性的加速方案:
一、优化CMake配置本身
- 避免完全重建build目录:不要每次都删除
bin目录重新执行cmake ../ -B .,而是直接用cmake --build bin进行增量构建。仅当CMakeLists.txt、vcpkg.json或系统环境变化时,才重新运行配置命令。 - 启用并行配置:CMake 3.12+支持
-j参数利用多核CPU加速配置,执行命令:cmake ../ -B . -j$(nproc) - 替换
aux_source_directory为显式源文件列表:aux_source_directory会在每次配置时扫描目录,耗时随文件数量增加。把:
改成显式列出文件:aux_source_directory(${CMAKE_SOURCE_DIR}/src/ SOURCE) aux_source_directory(${CMAKE_SOURCE_DIR}/test/ TEST_SOURCE)set(SOURCE src/file1.cpp src/file2.cpp # 其他源文件... ) set(TEST_SOURCE test/test1.cpp test/test2.cpp # 其他测试文件... )
二、优化Vcpkg相关配置
- 将toolchain文件移到命令行指定:不要在
CMakeLists.txt里硬编码CMAKE_TOOLCHAIN_FILE,改为执行CMake时通过参数传递:
这样CMake不会每次都重新加载toolchain脚本,减少配置开销。cmake ../ -B . -DCMAKE_TOOLCHAIN_FILE="${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" - 跳过编译器哈希检测:每次配置时Vcpkg都会检测编译器哈希,可通过环境变量跳过(注意:编译器版本变化时需要手动清除Vcpkg缓存):
export VCPKG_DISABLE_COMPILER_HASH=1
三、重构CMakeLists.txt减少冗余操作
- 提前设置构建类型:把
CMAKE_BUILD_TYPE的设置移到project命令之后、find_package之前,避免CMake在配置后期重新调整参数:project(G C CXX) # 提前设置构建类型 if(NOT DEFINED BUILD_TYPE) set(CMAKE_BUILD_TYPE RELEASE) else() set(CMAKE_BUILD_TYPE ${BUILD_TYPE}) endif() set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 17) - 用
target_include_directories替代全局include_directories:全局包含目录会让CMake处理所有目标的路径,改为针对单个目标设置:add_library(sourceLib SHARED ${SOURCE}) target_include_directories(sourceLib PRIVATE ${CMAKE_SOURCE_DIR}/inc) add_executable(test ${TEST_SOURCE}) target_include_directories(test PRIVATE ${CMAKE_SOURCE_DIR}/inc) - 移除无用变量:
ROOT_DIR变量在当前脚本中未被使用,可直接删除,减少CMake的变量处理步骤。
四、清理项目无关文件
- 删除项目根目录下的
__pycache__目录,避免CMake扫描无关文件,增加配置时间。
内容的提问来源于stack exchange,提问作者Minger
相关产品推荐
相关产品推荐

