简体中文 繁體中文 English Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย Français Japanese

站内搜索

搜索

活动公告

通知:为庆祝网站一周年,将在5.1日与5.2日开放注册,具体信息请见后续详细公告
04-22 00:04
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

从零开始构建Qt CMake项目完整指南掌握跨平台应用开发核心技巧与最佳实践解决常见配置问题提升开发效率

SunJu_FaceMall

3万

主题

1158

科技点

3万

积分

白金月票

碾压王

积分
32796

立华奏

发表于 2025-10-2 13:10:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. 引言:Qt与CMake的强大组合

Qt是一个功能强大的跨平台应用程序开发框架,而CMake是一个广泛使用的构建系统生成工具。将两者结合使用,可以为开发者提供一个强大、灵活且跨平台的开发环境。本指南将从零开始,详细介绍如何构建Qt CMake项目,掌握核心技巧与最佳实践,解决常见配置问题,并提升开发效率。

2. 环境准备

2.1 安装Qt

在开始之前,我们需要安装Qt框架。可以从Qt官方网站下载安装程序。

Windows系统:

1. 下载Qt在线安装程序
2. 运行安装程序并选择需要的Qt版本(例如Qt 6.2)
3. 确保选择Qt的对应编译器版本(如MSVC 2019 64-bit)
4. 安装Qt Creator(可选但推荐)

Linux系统(以Ubuntu为例):
  1. # 添加Qt仓库
  2. sudo add-apt-repository ppa:beineri/opt-qt-6.2-focal
  3. sudo apt update
  4. # 安装Qt 6.2和所需工具
  5. sudo apt install qt6-base-dev qt6-tools-dev cmake build-essential
复制代码

macOS系统:
  1. # 使用Homebrew安装
  2. brew install qt cmake
复制代码

2.2 安装CMake

CMake可以在CMake官方网站下载。

Windows系统:下载安装程序并按照向导完成安装。确保将CMake添加到系统PATH中。

Linux系统:
  1. sudo apt install cmake
复制代码

macOS系统:
  1. brew install cmake
复制代码

2.3 验证安装

打开终端或命令提示符,运行以下命令验证安装:
  1. # 检查Qt版本
  2. qmake --version
  3. # 或
  4. qmake6 --version
  5. # 检查CMake版本
  6. cmake --version
复制代码

3. 创建基本的Qt CMake项目

3.1 项目结构

一个基本的Qt CMake项目通常具有以下结构:
  1. my_qt_app/
  2. ├── CMakeLists.txt
  3. ├── src/
  4. │   ├── main.cpp
  5. │   ├── mainwindow.cpp
  6. │   └── mainwindow.h
  7. └── resources/
  8.     └── my_qt_app.qrc
复制代码

3.2 主CMakeLists.txt文件

创建项目根目录下的CMakeLists.txt文件:
  1. cmake_minimum_required(VERSION 3.16)
  2. # 项目名称
  3. project(MyQtApp VERSION 1.0.0 LANGUAGES CXX)
  4. # 设置C++标准
  5. set(CMAKE_CXX_STANDARD 17)
  6. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  7. # 查找Qt包
  8. find_package(Qt6 REQUIRED COMPONENTS Core Widgets)
  9. # 自动开启Qt的moc、uic和rcc
  10. set(CMAKE_AUTOMOC ON)
  11. set(CMAKE_AUTOUIC ON)
  12. set(CMAKE_AUTORCC ON)
  13. # 添加可执行文件
  14. add_executable(my_qt_app
  15.     src/main.cpp
  16.     src/mainwindow.cpp
  17.     src/mainwindow.h
  18.     resources/my_qt_app.qrc
  19. )
  20. # 链接Qt库
  21. target_link_libraries(my_qt_app PRIVATE Qt6::Core Qt6::Widgets)
复制代码

3.3 主程序文件

创建src/main.cpp文件:
  1. #include <QApplication>
  2. #include "mainwindow.h"
  3. int main(int argc, char *argv[])
  4. {
  5.     QApplication app(argc, argv);
  6.    
  7.     MainWindow window;
  8.     window.show();
  9.    
  10.     return app.exec();
  11. }
复制代码

3.4 主窗口文件

创建src/mainwindow.h文件:
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. class MainWindow : public QMainWindow
  5. {
  6.     Q_OBJECT
  7. public:
  8.     MainWindow(QWidget *parent = nullptr);
  9.     ~MainWindow();
  10. };
  11. #endif // MAINWINDOW_H
复制代码

创建src/mainwindow.cpp文件:
  1. #include "mainwindow.h"
  2. MainWindow::MainWindow(QWidget *parent)
  3.     : QMainWindow(parent)
  4. {
  5.     setWindowTitle("My Qt App");
  6.     resize(800, 600);
  7. }
  8. MainWindow::~MainWindow()
  9. {
  10. }
复制代码

3.5 资源文件

创建resources/my_qt_app.qrc文件:
  1. <!DOCTYPE RCC>
  2. <RCC version="1.0">
  3.     <qresource prefix="/">
  4.         <file>images/icon.png</file>
  5.     </qresource>
  6. </RCC>
复制代码

4. 构建和运行项目

4.1 使用命令行构建

创建构建目录并生成构建系统:
  1. mkdir build
  2. cd build
  3. cmake ..
复制代码

构建项目:
  1. # Linux/macOS
  2. make
  3. # Windows
  4. cmake --build . --config Release
复制代码

运行项目:
  1. # Linux/macOS
  2. ./my_qt_app
  3. # Windows
  4. Release/my_qt_app.exe
复制代码

4.2 使用Qt Creator构建

1. 打开Qt Creator
2. 选择”文件” > “打开文件或项目”
3. 选择项目根目录下的CMakeLists.txt文件
4. 配置构建套件(Kit)
5. 点击”构建项目”按钮,然后点击”运行”按钮

5. 高级CMake配置

5.1 设置Qt版本

有时需要指定特定的Qt版本,可以在CMakeLists.txt中添加:
  1. # 设置Qt版本(如果需要)
  2. set(Qt6_DIR "C:/Qt/6.2.4/msvc2019_64/lib/cmake/Qt6")
复制代码

5.2 添加更多Qt模块

如果项目需要其他Qt模块,可以在find_package命令中添加:
  1. find_package(Qt6 REQUIRED COMPONENTS
  2.     Core
  3.     Widgets
  4.     Network
  5.     Sql
  6.     Xml
  7. )
复制代码

然后在target_link_libraries中添加相应的库:
  1. target_link_libraries(my_qt_app PRIVATE
  2.     Qt6::Core
  3.     Qt6::Widgets
  4.     Qt6::Network
  5.     Qt6::Sql
  6.     Qt6::Xml
  7. )
复制代码

5.3 条件编译和平台特定设置

跨平台开发通常需要处理平台差异,CMake提供了条件编译的机制:
  1. # 平台特定设置
  2. if(WIN32)
  3.     # Windows特定设置
  4.     add_definitions(-DUNICODE -D_UNICODE)
  5.     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3")
  6. elseif(UNIX AND NOT APPLE)
  7.     # Linux特定设置
  8.     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
  9. elseif(APPLE)
  10.     # macOS特定设置
  11.     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
  12. endif()
复制代码

5.4 设置应用程序图标

为不同平台设置应用程序图标:
  1. # 设置Windows图标
  2. if(WIN32)
  3.     set(APP_ICON "${CMAKE_SOURCE_DIR}/resources/images/icon.ico")
  4.     set_target_properties(my_qt_app PROPERTIES
  5.         WIN32_EXECUTABLE TRUE
  6.         MACOSX_BUNDLE TRUE
  7.     )
  8. endif()
  9. # 设置macOS图标
  10. if(APPLE)
  11.     set(MACOSX_BUNDLE_ICON_FILE "icon.icns")
  12.     set(APP_ICON "${CMAKE_SOURCE_DIR}/resources/images/icon.icns")
  13.     set_source_files_properties(${APP_ICON} PROPERTIES
  14.         MACOSX_PACKAGE_LOCATION "Resources"
  15.     )
  16. endif()
  17. # 添加图标到可执行文件
  18. if(APP_ICON)
  19.     target_sources(my_qt_app PRIVATE ${APP_ICON})
  20. endif()
复制代码

6. 项目组织最佳实践

6.1 模块化项目结构

对于大型项目,推荐使用模块化的结构:
  1. my_large_qt_app/
  2. ├── CMakeLists.txt
  3. ├── cmake/
  4. │   └── FindSomeDependency.cmake
  5. ├── include/
  6. │   └── myapp/
  7. │       ├── core/
  8. │       ├── gui/
  9. │       └── utils/
  10. ├── src/
  11. │   ├── core/
  12. │   ├── gui/
  13. │   └── utils/
  14. ├── tests/
  15. │   ├── CMakeLists.txt
  16. │   └── test_core/
  17. ├── resources/
  18. │   ├── images/
  19. │   ├── translations/
  20. │   └── styles/
  21. └── third_party/
  22.     └── some_library/
复制代码

6.2 使用CMake子目录

对于模块化项目,可以使用add_subdirectory()命令:
  1. # 主CMakeLists.txt
  2. cmake_minimum_required(VERSION 3.16)
  3. project(MyLargeQtApp VERSION 1.0.0 LANGUAGES CXX)
  4. set(CMAKE_CXX_STANDARD 17)
  5. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  6. # 添加子目录
  7. add_subdirectory(src)
  8. add_subdirectory(tests)
复制代码

然后为每个子模块创建单独的CMakeLists.txt:
  1. # src/CMakeLists.txt
  2. find_package(Qt6 REQUIRED COMPONENTS Core Widgets)
  3. set(CMAKE_AUTOMOC ON)
  4. set(CMAKE_AUTOUIC ON)
  5. set(CMAKE_AUTORCC ON)
  6. # 核心模块
  7. add_subdirectory(core)
  8. # GUI模块
  9. add_subdirectory(gui)
  10. # 工具模块
  11. add_subdirectory(utils)
  12. # 主应用程序
  13. add_executable(my_large_qt_app
  14.     main.cpp
  15. )
  16. target_link_libraries(my_large_qt_app PRIVATE
  17.     core_lib
  18.     gui_lib
  19.     utils_lib
  20.     Qt6::Core
  21.     Qt6::Widgets
  22. )
复制代码

6.3 创建和使用CMake函数和宏

为减少重复代码,可以创建CMake函数和宏:
  1. # 在CMakeLists.txt中定义一个函数来创建Qt应用程序
  2. function(create_qt_app APP_NAME)
  3.     set(options)
  4.     set(oneValueArgs VERSION DESCRIPTION)
  5.     set(multiValueArgs SOURCES RESOURCES LIBS)
  6.     cmake_parse_arguments(CREATE_QT_APP "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
  7.     # 创建可执行文件
  8.     add_executable(${APP_NAME}
  9.         ${CREATE_QT_APP_SOURCES}
  10.         ${CREATE_QT_APP_RESOURCES}
  11.     )
  12.     # 设置版本和描述
  13.     if(CREATE_QT_APP_VERSION)
  14.         set_target_properties(${APP_NAME} PROPERTIES
  15.             VERSION ${CREATE_QT_APP_VERSION}
  16.         )
  17.     endif()
  18.     if(CREATE_QT_APP_DESCRIPTION)
  19.         set_target_properties(${APP_NAME} PROPERTIES
  20.             DESCRIPTION ${CREATE_QT_APP_DESCRIPTION}
  21.         )
  22.     endif()
  23.     # 链接库
  24.     target_link_libraries(${APP_NAME} PRIVATE
  25.         ${CREATE_QT_APP_LIBS}
  26.     )
  27. endfunction()
  28. # 使用函数创建应用程序
  29. create_qt_app(my_qt_app
  30.     VERSION "1.0.0"
  31.     DESCRIPTION "My Qt Application"
  32.     SOURCES
  33.         src/main.cpp
  34.         src/mainwindow.cpp
  35.         src/mainwindow.h
  36.     RESOURCES
  37.         resources/my_qt_app.qrc
  38.     LIBS
  39.         Qt6::Core
  40.         Qt6::Widgets
  41. )
复制代码

7. 跨平台开发技巧

7.1 处理路径差异

不同平台使用不同的路径分隔符,Qt提供了QDir和QFile类来处理这些差异:
  1. #include <QDir>
  2. #include <QFile>
  3. // 跨平台路径拼接
  4. QString configPath = QDir::homePath() + QDir::separator() + ".myapp" + QDir::separator() + "config.ini";
  5. // 使用QFile处理文件
  6. QFile configFile(configPath);
  7. if (configFile.exists()) {
  8.     // 文件存在,读取配置
  9. } else {
  10.     // 文件不存在,创建默认配置
  11. }
复制代码

7.2 处理文件系统差异

不同平台对文件系统的处理也有所不同:
  1. #include <QStandardPaths>
  2. // 获取跨平台标准路径
  3. QString appDataPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
  4. // 确保目录存在
  5. QDir dir(appDataPath);
  6. if (!dir.exists()) {
  7.     dir.mkpath(".");
  8. }
复制代码

7.3 处理UI差异

不同平台的UI风格和习惯不同,可以使用Qt的样式表和布局来适应:
  1. // 设置跨平台样式
  2. #ifdef Q_OS_WIN
  3.     QApplication::setStyle("Fusion");
  4. #endif
  5. // 使用布局而不是固定位置
  6. QVBoxLayout *layout = new QVBoxLayout;
  7. layout->addWidget(button1);
  8. layout->addWidget(button2);
  9. setLayout(layout);
复制代码

8. 常见配置问题及解决方案

8.1 Qt版本不匹配问题

问题:系统中安装了多个Qt版本,CMake找到了错误的版本。

解决方案:明确指定Qt路径:
  1. # 在CMakeLists.txt中明确指定Qt路径
  2. set(Qt6_DIR "C:/Qt/6.2.4/msvc2019_64/lib/cmake/Qt6")
复制代码

或者在命令行中指定:
  1. cmake -DQt6_DIR="C:/Qt/6.2.4/msvc2019_64/lib/cmake/Qt6" ..
复制代码

8.2 找不到Qt模块问题

问题:CMake报告找不到所需的Qt模块。

解决方案:确保在find_package中列出了所有需要的组件:
  1. find_package(Qt6 REQUIRED COMPONENTS Core Widgets Network Sql Xml)
复制代码

如果仍然找不到,可能需要安装相应的Qt模块。

8.3 编译器不匹配问题

问题:Qt和项目使用不同的编译器编译。

解决方案:确保使用与Qt版本匹配的编译器:
  1. # 指定编译器
  2. set(CMAKE_CXX_COMPILER "cl.exe")  # Windows MSVC
  3. # 或
  4. set(CMAKE_CXX_COMPILER "g++")     # GCC
  5. # 或
  6. set(CMAKE_CXX_COMPILER "clang++") # Clang
复制代码

8.4 链接错误问题

问题:链接阶段出现未定义的引用错误。

解决方案:确保所有需要的库都已正确链接:
  1. target_link_libraries(my_qt_app PRIVATE
  2.     Qt6::Core
  3.     Qt6::Widgets
  4.     # 添加其他需要的库
  5. )
复制代码

8.5 资源文件问题

问题:资源文件(如图像、翻译等)未正确包含在可执行文件中。

解决方案:确保资源文件已添加到项目中,并且.qrc文件已正确配置:
  1. # 确保AUTORCC已开启
  2. set(CMAKE_AUTORCC ON)
  3. # 添加资源文件
  4. add_executable(my_qt_app
  5.     main.cpp
  6.     mainwindow.cpp
  7.     mainwindow.h
  8.     resources/my_qt_app.qrc  # 确保包含.qrc文件
  9. )
复制代码

9. 提升开发效率的技巧

9.1 使用CMake预设

CMake 3.20+支持预设文件(CMakePresets.json),可以简化构建配置:
  1. {
  2.   "version": 2,
  3.   "configurePresets": [
  4.     {
  5.       "name": "windows-debug",
  6.       "displayName": "Windows Debug",
  7.       "generator": "Ninja",
  8.       "binaryDir": "${sourceDir}/build/debug",
  9.       "cacheVariables": {
  10.         "CMAKE_BUILD_TYPE": "Debug",
  11.         "CMAKE_PREFIX_PATH": "C:/Qt/6.2.4/msvc2019_64"
  12.       }
  13.     },
  14.     {
  15.       "name": "windows-release",
  16.       "displayName": "Windows Release",
  17.       "generator": "Ninja",
  18.       "binaryDir": "${sourceDir}/build/release",
  19.       "cacheVariables": {
  20.         "CMAKE_BUILD_TYPE": "Release",
  21.         "CMAKE_PREFIX_PATH": "C:/Qt/6.2.4/msvc2019_64"
  22.       }
  23.     }
  24.   ]
  25. }
复制代码

使用预设配置项目:
  1. cmake --preset windows-debug
  2. cmake --build --preset windows-debug
复制代码

9.2 使用CMake工具文件

CMake工具文件(Toolchain files)可以简化跨平台编译:
  1. # windows-msvc.cmake
  2. set(CMAKE_C_COMPILER cl.exe)
  3. set(CMAKE_CXX_COMPILER cl.exe)
  4. set(CMAKE_PREFIX_PATH "C:/Qt/6.2.4/msvc2019_64")
复制代码

使用工具文件配置项目:
  1. cmake -DCMAKE_TOOLCHAIN_FILE=windows-msvc.cmake ..
复制代码

9.3 使用CMake的包管理功能

CMake 3.11+引入了FetchContent模块,可以直接从Git仓库获取依赖:
  1. include(FetchContent)
  2. FetchContent_Declare(
  3.     some_dependency
  4.     GIT_REPOSITORY https://github.com/user/some_dependency.git
  5.     GIT_TAG v1.0.0
  6. )
  7. FetchContent_MakeAvailable(some_dependency)
  8. target_link_libraries(my_qt_app PRIVATE some_dependency)
复制代码

9.4 使用C++20模块(如果编译器支持)

如果你的编译器支持C++20模块,可以使用它们来加速编译:
  1. // mymodule.ixx
  2. export module mymodule;
  3. import <QtWidgets/QWidget>;
  4. export class MyWidget : public QWidget {
  5.     Q_OBJECT
  6. public:
  7.     MyWidget(QWidget *parent = nullptr);
  8. };
复制代码

然后在CMake中启用C++20模块:
  1. set(CMAKE_CXX_STANDARD 20)
  2. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  3. set(CMAKE_CXX_EXTENSIONS OFF)
  4. # 启用C++模块实验性支持
  5. if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  6.     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmodules-ts")
  7. endif()
复制代码

9.5 使用预编译头

对于大型项目,使用预编译头可以显著减少编译时间:
  1. # 创建预编译头
  2. target_precompile_headers(my_qt_app PRIVATE
  3.     <QtWidgets/QApplication>
  4.     <QtWidgets/QMainWindow>
  5.     "src/pch.h"
  6. )
复制代码

创建src/pch.h文件:
  1. #ifndef PCH_H
  2. #define PCH_H
  3. // 常用Qt头文件
  4. #include <QtWidgets/QApplication>
  5. #include <QtWidgets/QMainWindow>
  6. #include <QtWidgets/QWidget>
  7. #include <QtWidgets/QPushButton>
  8. #include <QtWidgets/QVBoxLayout>
  9. #include <QtWidgets/QHBoxLayout>
  10. // 标准库头文件
  11. #include <memory>
  12. #include <vector>
  13. #include <string>
  14. #endif // PCH_H
复制代码

10. 部署和分发

10.1 Windows部署

在Windows上,可以使用windeployqt工具来收集Qt依赖:
  1. # 添加自定义目标来运行windeployqt
  2. add_custom_command(TARGET my_qt_app POST_BUILD
  3.     COMMAND ${CMAKE_COMMAND} -E copy_if_different
  4.         $<TARGET_FILE:my_qt_app>
  5.         ${CMAKE_BINARY_DIR}/package/$<TARGET_FILE_NAME:my_qt_app>
  6. )
  7. add_custom_target(deploy
  8.     COMMAND ${Qt6_DIR}/../../../bin/windeployqt.exe
  9.         ${CMAKE_BINARY_DIR}/package/$<TARGET_FILE_NAME:my_qt_app>
  10.     DEPENDS my_qt_app
  11.     WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/package
  12. )
复制代码

10.2 Linux部署

在Linux上,可以使用LinuxDeployQt或AppImage:
  1. # 添加自定义目标来创建AppImage
  2. add_custom_target(package
  3.     COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/AppImage/usr/bin
  4.     COMMAND ${CMAKE_COMMAND} -E copy_if_different
  5.         $<TARGET_FILE:my_qt_app>
  6.         ${CMAKE_BINARY_DIR}/AppImage/usr/bin/
  7.     COMMAND linuxdeployqt
  8.         ${CMAKE_BINARY_DIR}/AppImage/usr/bin/my_qt_app
  9.         -appimage
  10.     DEPENDS my_qt_app
  11.     WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  12. )
复制代码

10.3 macOS部署

在macOS上,可以创建应用程序包:
  1. # 设置macOS应用程序包属性
  2. set_target_properties(my_qt_app PROPERTIES
  3.     MACOSX_BUNDLE TRUE
  4.     MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/cmake/Info.plist.in
  5.     MACOSX_BUNDLE_GUI_IDENTIFIER "com.mycompany.myapp"
  6.     MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
  7.     MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
  8.     MACOSX_BUNDLE_COPYRIGHT "Copyright © 2023 My Company. All rights reserved."
  9. )
  10. # 添加自定义目标来运行macdeployqt
  11. add_custom_target(deploy
  12.     COMMAND ${Qt6_DIR}/../../../bin/macdeployqt
  13.         ${CMAKE_BINARY_DIR}/my_qt_app.app
  14.         -dmg
  15.     DEPENDS my_qt_app
  16.     WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  17. )
复制代码

11. 持续集成/持续部署(CI/CD)

11.1 GitHub Actions示例

创建.github/workflows/build.yml文件:
  1. name: Build
  2. on: [push, pull_request]
  3. jobs:
  4.   build:
  5.     strategy:
  6.       matrix:
  7.         os: [ubuntu-latest, windows-latest, macos-latest]
  8.         qt-version: [6.2.4]
  9.         include:
  10.           - os: ubuntu-latest
  11.             qt-arch: gcc_64
  12.           - os: windows-latest
  13.             qt-arch: win64_msvc2019_64
  14.           - os: macos-latest
  15.             qt-arch: clang_64
  16.     runs-on: ${{ matrix.os }}
  17.     steps:
  18.     - uses: actions/checkout@v2
  19.     - name: Install Qt
  20.       uses: jurplel/install-qt-action@v2
  21.       with:
  22.         version: ${{ matrix.qt-version }}
  23.         arch: ${{ matrix.qt-arch }}
  24.     - name: Configure (Windows)
  25.       if: runner.os == 'Windows'
  26.       run: cmake -B build -G "Visual Studio 16 2019" -A x64
  27.     - name: Configure (Unix)
  28.       if: runner.os != 'Windows'
  29.       run: cmake -B build
  30.     - name: Build
  31.       run: cmake --build build --config Release
  32.     - name: Test
  33.       run: cd build && ctest -C Release
  34.     - name: Package
  35.       run: cmake --build build --target deploy
复制代码

11.2 GitLab CI示例

创建.gitlab-ci.yml文件:
  1. stages:
  2.   - build
  3.   - test
  4.   - deploy
  5. variables:
  6.   QT_VERSION: "6.2.4"
  7. build:windows:
  8.   stage: build
  9.   tags:
  10.     - windows
  11.   script:
  12.     - cmake -B build -G "Visual Studio 16 2019" -A x64
  13.     - cmake --build build --config Release
  14.   artifacts:
  15.     paths:
  16.       - build/
  17. build:linux:
  18.   stage: build
  19.   tags:
  20.     - linux
  21.   script:
  22.     - cmake -B build
  23.     - cmake --build build --config Release
  24.   artifacts:
  25.     paths:
  26.       - build/
  27. build:macos:
  28.   stage: build
  29.   tags:
  30.     - macos
  31.   script:
  32.     - cmake -B build
  33.     - cmake --build build --config Release
  34.   artifacts:
  35.     paths:
  36.       - build/
  37. test:
  38.   stage: test
  39.   script:
  40.     - cd build
  41.     - ctest -C Release
  42.   dependencies:
  43.     - build:windows
  44.     - build:linux
  45.     - build:macos
  46. deploy:
  47.   stage: deploy
  48.   script:
  49.     - cmake --build build --target deploy
  50.   artifacts:
  51.     paths:
  52.       - build/package/
  53.   only:
  54.     - main
复制代码

12. 总结

本指南详细介绍了如何从零开始构建Qt CMake项目,包括环境设置、基本项目创建、高级配置、跨平台开发技巧、常见问题解决方案以及效率提升技巧。通过掌握这些核心技巧和最佳实践,你可以更高效地开发跨平台Qt应用程序。

记住,良好的项目结构和构建系统是成功项目的基石。使用CMake管理Qt项目不仅提供了跨平台兼容性,还简化了依赖管理和构建过程,使你能够专注于应用程序的核心功能开发。

随着项目的增长,不断优化和调整你的构建系统,采用自动化测试和部署流程,这将大大提高开发效率和软件质量。希望本指南能帮助你在Qt CMake开发的道路上取得成功!
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

手机版|联系我们|小黑屋|TG频道|RSS |网站地图

Powered by Pixtech

© 2025-2026 Pixtech Team.

>