如何通过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
相关产品推荐
相关产品推荐

