QtCMake项目生成器Skill qt-cmake-project-generator

Qt CMake项目生成器是一款专门用于自动化生成基于CMake的Qt项目配置的工具。它能够快速创建包含正确模块依赖、交叉编译支持和现代化Qt6配置的项目框架,支持多平台构建、包管理器集成和部署脚本生成。关键词:Qt项目生成,CMake配置,交叉编译,Qt6开发,跨平台构建,自动化工具

嵌入式软件 0 次安装 0 次浏览 更新于 2/25/2026

名称: qt-cmake-项目生成器 描述: 生成基于CMake的Qt项目,包含正确的模块依赖、交叉编译支持和现代化的Qt6配置 允许使用的工具: 读取, 写入, 编辑, Bash, Glob, Grep 标签: [qt, cmake, cpp, 跨平台, 构建]

qt-cmake-项目生成器

生成基于CMake的Qt项目配置,包含正确的模块依赖和交叉编译支持。此技能处理Qt6与CMake的集成、模块发现以及特定平台的构建配置。

功能

  • 为Qt6项目生成现代化的CMake配置
  • 配置Qt模块依赖(Core, Widgets, Quick, Network等)
  • 设置交叉编译工具链
  • 配置vcpkg/Conan包管理器集成
  • 生成平台特定的构建配置
  • 设置Qt部署脚本(windeployqt, macdeployqt)
  • 配置静态与动态链接
  • 为开发和CI生成CMake预设

输入模式

{
  "类型": "对象",
  "属性": {
    "项目路径": {
      "类型": "字符串",
      "描述": "创建/更新Qt项目的路径"
    },
    "项目名称": {
      "类型": "字符串",
      "描述": "项目名称"
    },
    "qt版本": {
      "类型": "字符串",
      "默认": "6.6",
      "描述": "目标Qt版本"
    },
    "qt模块": {
      "类型": "数组",
      "项": {
        "枚举": ["Core", "Gui", "Widgets", "Quick", "Qml", "Network", "Sql", "Multimedia", "WebEngine", "Charts", "3D"]
      },
      "默认": ["Core", "Gui", "Widgets"]
    },
    "应用类型": {
      "枚举": ["widgets", "quick", "console", "library"],
      "默认": "widgets"
    },
    "目标平台": {
      "类型": "数组",
      "项": { "枚举": ["windows", "macos", "linux", "android", "ios", "wasm"] }
    },
    "包管理器": {
      "枚举": ["none", "vcpkg", "conan"],
      "默认": "none"
    },
    "cpp标准": {
      "枚举": ["17", "20", "23"],
      "默认": "17"
    },
    "生成预设": {
      "类型": "布尔值",
      "默认": true
    }
  },
  "必需": ["项目路径", "项目名称"]
}

输出模式

{
  "类型": "对象",
  "属性": {
    "成功": { "类型": "布尔值" },
    "文件": {
      "类型": "数组",
      "项": {
        "类型": "对象",
        "属性": {
          "路径": { "类型": "字符串" },
          "描述": { "类型": "字符串" }
        }
      }
    },
    "构建命令": {
      "类型": "对象",
      "属性": {
        "配置": { "类型": "字符串" },
        "构建": { "类型": "字符串" },
        "安装": { "类型": "字符串" }
      }
    },
    "警告": { "类型": "数组", "项": { "类型": "字符串" } }
  },
  "必需": ["成功"]
}

生成的CMakeLists.txt示例

cmake_minimum_required(VERSION 3.21)
project(MyQtApp VERSION 1.0.0 LANGUAGES CXX)

# C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Qt 配置
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

# 查找Qt包
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)

# 源文件
set(SOURCES
    src/main.cpp
    src/mainwindow.cpp
    src/mainwindow.h
    src/mainwindow.ui
)

# 资源
set(RESOURCES
    resources/resources.qrc
)

# 创建可执行文件
qt_add_executable(${PROJECT_NAME}
    ${SOURCES}
    ${RESOURCES}
)

# 链接Qt库
target_link_libraries(${PROJECT_NAME} PRIVATE
    Qt6::Core
    Qt6::Gui
    Qt6::Widgets
)

# 平台特定设置
if(WIN32)
    set_target_properties(${PROJECT_NAME} PROPERTIES
        WIN32_EXECUTABLE TRUE
    )
elseif(APPLE)
    set_target_properties(${PROJECT_NAME} PROPERTIES
        MACOSX_BUNDLE TRUE
        MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/platform/macos/Info.plist"
    )
endif()

# 安装
install(TARGETS ${PROJECT_NAME}
    BUNDLE DESTINATION .
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

# Qt部署
qt_generate_deploy_app_script(
    TARGET ${PROJECT_NAME}
    OUTPUT_SCRIPT deploy_script
    NO_UNSUPPORTED_PLATFORM_ERROR
)
install(SCRIPT ${deploy_script})

CMake预设

{
  "版本": 6,
  "配置预设": [
    {
      "名称": "default",
      "显示名称": "默认",
      "二进制目录": "${sourceDir}/build/${presetName}",
      "缓存变量": {
        "CMAKE_BUILD_TYPE": "Debug"
      }
    },
    {
      "名称": "release",
      "继承": "default",
      "显示名称": "发布",
      "缓存变量": {
        "CMAKE_BUILD_TYPE": "Release"
      }
    },
    {
      "名称": "windows-msvc",
      "继承": "default",
      "显示名称": "Windows MSVC",
      "生成器": "Visual Studio 17 2022",
      "架构": "x64",
      "条件": {
        "类型": "等于",
        "左侧": "${hostSystemName}",
        "右侧": "Windows"
      }
    },
    {
      "名称": "macos",
      "继承": "default",
      "显示名称": "macOS",
      "生成器": "Ninja",
      "缓存变量": {
        "CMAKE_OSX_ARCHITECTURES": "x86_64;arm64"
      },
      "条件": {
        "类型": "等于",
        "左侧": "${hostSystemName}",
        "右侧": "Darwin"
      }
    },
    {
      "名称": "linux",
      "继承": "default",
      "显示名称": "Linux",
      "生成器": "Ninja",
      "条件": {
        "类型": "等于",
        "左侧": "${hostSystemName}",
        "右侧": "Linux"
      }
    }
  ],
  "构建预设": [
    {
      "名称": "default",
      "配置预设": "default"
    },
    {
      "名称": "release",
      "配置预设": "release"
    }
  ]
}

交叉编译工具链

# toolchain-linux-aarch64.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

set(CMAKE_SYSROOT /opt/sysroots/aarch64-linux-gnu)
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

包管理器集成

vcpkg

# CMakeLists.txt
if(DEFINED ENV{VCPKG_ROOT})
    set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")
endif()

Conan

# conanfile.py
from conan import ConanFile
from conan.tools.cmake import cmake_layout

class MyQtAppConan(ConanFile):
    settings = "os", "compiler", "build_type", "arch"
    generators = "CMakeToolchain", "CMakeDeps"

    def requirements(self):
        self.requires("qt/6.6.0")

    def layout(self):
        cmake_layout(self)

最佳实践

  1. 使用qt_add_executable:对于Qt6,优先于add_executable
  2. 启用AUTOMOC/AUTOUIC/AUTORCC:自动元对象编译
  3. 使用CMake预设:简化不同环境的配置
  4. 版本化你的Qt需求find_package(Qt6 6.4 REQUIRED ...)
  5. 使用现代CMake:target_*命令优于全局设置
  6. 生成部署脚本:使用Qt的部署工具

相关技能

  • qt-qml-组件生成器 - QML组件创建
  • qt-安装程序框架配置 - 安装程序配置
  • qt-测试夹具生成器 - 测试设置

相关代理

  • qt-cpp-专家 - Qt/C++专业知识
  • 桌面-ci-架构师 - Qt项目的CI/CD