You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CMake ExternalProject_Add构建mongo-c-driver时安装停滞

问题概述

使用CMake 4.0.0搭建的超级构建项目中,mongo-c-driver的安装步骤始终无法完成,最后一条日志停留在:

-- Installing: <...>-Release/../artifacts/thirdparty/mongo-c-driver/share/mongo-c-driver/THIRD_PARTY_NOTICES

推测该文档文件是最后一个安装项,但进程卡住无进展。项目主CMake配置及第三方依赖构建脚本如下:

主CMakeLists.txt

cmake_minimum_required(VERSION 3.20)
project(...-solution)

if(NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0)
    message(FATAL_ERROR "Clang version must be at least 14.0!")
endif()

set(TESSER_CLANG_TIDY "clang-tidy-15")
set(TESSER_CLANG_FORMAT "clang-format-15")

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_FIND_DEBUG_MODE ON)
set(CMAKE_VERBOSE_MAKEFILE ON)

# Handle superbuild first
option (USE_SUPERBUILD "Whether or not a superbuild should be invoked" ON)

if (USE_SUPERBUILD)
    include(thirdparty.cmake)
else()
    include(product.cmake)
endif()

thirdparty.cmake

include(ExternalProject)

if (CMAKE_BUILD_TYPE STREQUAL "Debug")
    set(ENABLE_LTO OFF)
    set(BOOST_LTO "")
    set(BOOST_VARIANT debug)
else()
    set(ENABLE_LTO ON)
    set(BOOST_LTO "--lto=on")
    set(BOOST_VARIANT release)
endif()

set(THIRDPARTY_CMAKE_CACHE_ARGS
    -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
    -DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER}
    -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER}
    -DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD}
    -DCMAKE_INTERPROCEDURAL_OPTIMIZATION:BOOL=${ENABLE_LTO}
    )

set(THIRDPARTY_INSTALL_DIR ${CMAKE_BINARY_DIR}/../artifacts/thirdparty/${CMAKE_BUILD_TYPE})

ExternalProject_Add(
    mongo_c_driver
    GIT_REPOSITORY https://github.com/mongodb/mongo-c-driver.git
    GIT_TAG 1.30.2
    SOURCE_DIR "${CMAKE_BINARY_DIR}/mongo-c-driver"
    BINARY_DIR "${CMAKE_BINARY_DIR}/mongo-c-driver/build"
    BUILD_ALWAYS 1
    UPDATE_COMMAND ""
    CMAKE_CACHE_ARGS
        ${THIRDPARTY_CMAKE_CACHE_ARGS}
        -DENABLE_AUTOMATIC_INIT_AND_CLEANUP:BOOL=OFF
        -DCMAKE_INSTALL_PREFIX:PATH=${THIRDPARTY_INSTALL_DIR}/mongo-c-driver
    )
解决方案尝试

以下是针对该问题的几种排查和修复方向:

  • 检查安装路径权限与路径解析
    当前安装路径使用了相对路径../,可能导致CMake解析路径时出现异常,或者目标目录无读写权限。建议改用绝对路径,例如:

    set(THIRDPARTY_INSTALL_DIR ${CMAKE_SOURCE_DIR}/artifacts/thirdparty/${CMAKE_BUILD_TYPE})
    

    同时确认目标目录${THIRDPARTY_INSTALL_DIR}/mongo-c-driver的父目录已存在,且当前用户拥有完整的读写权限。

  • 禁用强制重新构建
    配置中BUILD_ALWAYS 1会强制每次构建都重新编译mongo-c-driver,可能引发文件锁定或重复操作导致的卡顿。将其改为:

    BUILD_ALWAYS 0
    

    仅在源码或配置变更时重新构建。

  • 增加安装步骤日志 verbosity
    替换默认的安装命令,获取更详细的安装过程日志,定位具体卡顿点:

    ExternalProject_Add(
        mongo_c_driver
        # ... 其他配置保持不变
        INSTALL_COMMAND ${CMAKE_COMMAND} --install . --verbose --prefix=${THIRDPARTY_INSTALL_DIR}/mongo-c-driver
    )
    

    通过详细日志确认是否是文件复制、权限等待或其他操作导致的停滞。

  • 跳过文档安装
    如果THIRDPARTY_NOTICES等文档并非必需,可以通过mongo-c-driver的CMake选项禁用文档安装:

    CMAKE_CACHE_ARGS
        ${THIRDPARTY_CMAKE_CACHE_ARGS}
        -DENABLE_AUTOMATIC_INIT_AND_CLEANUP:BOOL=OFF
        -DENABLE_DOCS:BOOL=OFF
        -DCMAKE_INSTALL_PREFIX:PATH=${THIRDPARTY_INSTALL_DIR}/mongo-c-driver
    
  • 降级CMake版本
    CMake 4.0.0是较新的版本,可能与ExternalProject模块存在兼容性问题。尝试降级到CMake 3.27~3.29版本,验证是否是新版本的bug导致的安装停滞。

内容的提问来源于stack exchange,提问作者Moravas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 13:05:56