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

如何通过CMake的FetchContent正确获取并构建Qt 6.4.2?

解决CMake FetchContent构建Qt6.4.2的问题

一、修正FetchContent的Qt构建流程

你当前的脚本存在两个核心问题:一是错误使用了Qt5的仓库地址(Qt6需拉取qt6官方仓库),二是FetchContent默认的CONFIGURE_COMMAND不兼容Qt自定义的构建流程。以下是修正后的完整脚本:

include(FetchContent)

FetchContent_Declare(
  Qt6
  GIT_REPOSITORY "https://github.com/qt/qt6"
  GIT_TAG v6.4.2
)

FetchContent_GetProperties(Qt6)
if(NOT qt6_POPULATED)
  # 拉取Qt6源码
  FetchContent_Populate(Qt6)
  
  # 1. 执行初始化命令拉取子模块
  execute_process(
    COMMAND perl init-repository
    WORKING_DIRECTORY ${qt6_SOURCE_DIR}
    RESULT_VARIABLE init_result
    ERROR_VARIABLE init_error
  )
  if(NOT init_result EQUAL 0)
    message(FATAL_ERROR "Qt6仓库初始化失败: ${init_error}")
  endif()
  
  # 2. 创建构建目录并执行Qt自定义configure
  set(qt6_BUILD_DIR ${qt6_BINARY_DIR})
  file(MAKE_DIRECTORY ${qt6_BUILD_DIR})
  
  execute_process(
    COMMAND ${qt6_SOURCE_DIR}/configure -prefix ${CMAKE_INSTALL_PREFIX} -release -skip qtwebengine
    WORKING_DIRECTORY ${qt6_BUILD_DIR}
    RESULT_VARIABLE configure_result
    ERROR_VARIABLE configure_error
  )
  if(NOT configure_result EQUAL 0)
    message(FATAL_ERROR "Qt6配置失败: ${configure_error}")
  endif()
  
  # 3. 并行构建Qt6
  execute_process(
    COMMAND ${CMAKE_MAKE_PROGRAM} -j${CMAKE_BUILD_PARALLEL_LEVEL}
    WORKING_DIRECTORY ${qt6_BUILD_DIR}
    RESULT_VARIABLE build_result
    ERROR_VARIABLE build_error
  )
  if(NOT build_result EQUAL 0)
    message(FATAL_ERROR "Qt6构建失败: ${build_error}")
  endif()
  
  # 4. 安装Qt6到指定路径
  execute_process(
    COMMAND ${CMAKE_MAKE_PROGRAM} install
    WORKING_DIRECTORY ${qt6_BUILD_DIR}
    RESULT_VARIABLE install_result
    ERROR_VARIABLE install_error
  )
  if(NOT install_result EQUAL 0)
    message(FATAL_ERROR "Qt6安装失败: ${install_error}")
  endif()
  
  # 让CMake能找到安装好的Qt6
  list(APPEND CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX})
endif()

# 后续正常调用find_package即可
find_package(Qt6 REQUIRED COMPONENTS Core Widgets)

关键说明:

  • 替换仓库地址为Qt6官方仓库:https://github.com/qt/qt6,原脚本用的qt5仓库会导致版本不匹配。
  • 手动接管初始化、配置、构建、安装流程:Qt6的源码需要先通过perl init-repository拉取子模块,且使用自身的configure脚本而非CMake默认的配置命令。
  • 可自定义configure参数:比如-release指定编译发布版,-skip qtwebengine跳过不需要的模块以缩短编译时间。

二、避免GitHub拉取时输入用户名密码

有三种可靠方案:

1. 使用SSH仓库地址

将GIT_REPOSITORY改为SSH格式:

GIT_REPOSITORY "git@github.com:qt/qt6.git"

前提是你已经将本地SSH公钥添加到GitHub账户的SSH密钥列表中,拉取时无需验证密码。

2. 配置Git凭证缓存

如果偏好HTTPS地址,执行以下命令让Git缓存凭证:

# 临时缓存(默认15分钟)
git config --global credential.helper cache
# 永久存储(仅限私人机器使用)
git config --global credential.helper store

首次输入用户名密码后,Git会自动缓存,后续拉取无需重复输入。

3. 使用GitHub个人访问令牌(PAT)

生成一个仅含repo权限的PAT,将仓库地址改为:

GIT_REPOSITORY "https://<你的PAT>@github.com/qt/qt6.git"

PAT可在GitHub设置的「Developer settings」→「Personal access tokens」中生成,有效期可自行设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:25:52