vsCode+cmake+mingw+ninja+qt6环境搭建(包含例子代码)及问题处理

一. 内容简介

vsCode+cmake+ninja+qt6环境搭建(包含例子代码)及问题处理。
代码以及安装包链接:
通过网盘分享的文件:vsCode+cmake+mingw+ninja+qt6环境搭建(包含例子代码)及问题处理
链接: https://pan.baidu.com/s/1-_yMAsYfYmNzcCzHiOwb8Q?pwd=8888 提取码: 8888

二. 软件环境

2.1 vsCode

2.2 cmake

2.3 mingw

2.4 ninja

2.5 qt6

三.主要流程

3.1 软件安装

3.2 软件介绍

3.3 软件运行

3.4 问题处理

四.具体步骤

4.1 软件安装

CMake
就随便下载安装就可以了(网盘里面也有),插件如下(日积月累装的,具体都是什么作用不清楚):
在这里插入图片描述

Code Runner
Better C++ Syntax
C/C++
C/C++ Extension Pack
C/C++ Themes
Makefile Tools

cmake
用的是cmake-4.1.1-windows-x86_64.msi,直接安装网盘的安装包,

mingw,ninja,qt6
都是用qt安装的,qt安装的6.8,ninja只有一个,mingw和qt6.8匹配就行,直接安装网盘的安装包,

// cmd(管理员运行),进入到对应的文件的,执行下面的,安装就行
qt-online-installer-windows-x64-online --mirror https://mirrors.ustc.edu.cn/qtproject
// 这个用于后面增加或者去掉组件
MaintenanceTool.exe --mirror https://mirror.nju.edu.cn/qt

4.2 软件介绍

软件结构基本就这样,

mingw_qt6/
├── CMakeLists.txt              # 根CMake配置
├── src/                        # 主程序源代码
│   ├── main.cpp
│   ├── MainWindow/
│   │   ├── MainWindow.cpp
│   │   ├── MainWindow.h
│   │   └── MainWindow.ui
│   ├── Widgets/               # 自定义控件
│   │   ├── CustomButton.cpp
│   │   └── CustomButton.h
│   └── Utils/                 # 工具类
│       ├── Logger.cpp
│       └── Logger.h
├── include/                    # 公共头文件(如果需要)
│   └── CommonDefines.h
├── ui/                         # 纯UI文件(可选,如果喜欢分离)
│   ├── SettingsDialog.ui
│   └── AboutDialog.ui
├── resources/                  # 资源文件
│   ├── images/
│   │   ├── app_icon.png
│   │   └── toolbar/
│   ├── styles/
│   │   └── main.qss
│   └── translations/
│       ├── zh_CN.ts
│       └── en_US.ts
├── tests/                      # 测试代码
│   ├── unit/
│   │   ├── TestMainWindow.cpp
│   │   └── CMakeLists.txt
│   └── integration/
├── third_party/                # 第三方库
│   └── CMakeLists.txt
├── docs/                       # 文档
│   ├── README.md
│   └── design/
├── scripts/                    # 实用脚本
│   ├── setup_env.sh
│   └── deploy.py
├── build/                      # 构建输出(不提交到git)
├── .vscode/                    # VSCode配置
│   ├── settings.json
│   ├── tasks.json
│   └── launch.json
└── .gitignore

4.3 软件运行

下载代码,使用vscode打开,里面的CMakePresets.json,tasks.json,launch.json,c_cpp_properties.json都是配置好的,需要按自己的的配置改一下。
在这里插入图片描述
CMakePresets.json

// CMakePresets.json
// 按着自己的位置给,CMAKE_C_COMPILER,CMAKE_CXX_COMPILER,CMAKE_MAKE_PROGRAM,Qt6_DIR位置都替换一下
{
  "version": 3,
  "configurePresets": [
    {
      "name": "debug_Ninja",
      "displayName": "Debug Build",
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/build/debug",
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Debug",
        "CMAKE_C_COMPILER": "D:/Qt/Tools/mingw1310_64/bin/gcc.exe",
        "CMAKE_CXX_COMPILER": "D:/Qt/Tools/mingw1310_64/bin/g++.exe",
        "CMAKE_MAKE_PROGRAM": "D:/Qt/Tools/Ninja/ninja.exe",
        "SHOW_CONSOLE":true,
        "Qt6_DIR": "D:/Qt/6.8.3/mingw_64/lib/cmake/Qt6"
      }
    },
    {
      "name": "release_Ninja",
      "displayName": "Release Build",
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/build/release",
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Release",
        "CMAKE_C_COMPILER": "D:/Qt/Tools/mingw1310_64/bin/gcc.exe",
        "CMAKE_CXX_COMPILER": "D:/Qt/Tools/mingw1310_64/bin/g++.exe",
        "CMAKE_MAKE_PROGRAM": "D:/Qt/Tools/Ninja/ninja.exe",
        "SHOW_CONSOLE":false,
        "Qt6_DIR": "D:/Qt/6.8.3/mingw_64/lib/cmake/Qt6"
      }
    }
  ]
}

task.json

// task.json 直接用就行,
{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "cmake-configure-debug",
            "command": "cmake",
            "args": [
                "--preset",
                "debug_Ninja"
            ]
        },
        {
            "type": "shell",
            "label": "cmake-configure-release",
            "command": "cmake",
            "args": [
                "--preset",
                "release_Ninja"
            ]
        },
        {
            "label": "ninja-build-debug",
            "group": {
                "kind": "build",
                "isDefault": false
            },
            "command": "ninja",
            "args": [
                "-C",
                "${workspaceFolder}/build/debug",
                "-j0"
            ]
        },
        {
            "label": "ninja-build-release",
            "command": "ninja",
            "args": [
                "-C",
                "${workspaceFolder}/build/release",
                "-j0"
            ]
        },
        {
            "label": "Build Debug",
            "dependsOrder": "sequence",
            "dependsOn": [
                "cmake-configure-debug",
                "ninja-build-debug"
            ]
        },
        {
            "label": "Build Release",
            "dependsOrder": "sequence",
            "dependsOn": [
                "cmake-configure-release",
                "ninja-build-release"
            ]
        },
        {
            "label": "Clean Debug",
            "command": "ninja",
            "args": [
                "-C",
                "${workspaceFolder}/build/debug",
                "clean"
            ]
        },
        {
            "label": "Clean Release",
            "command": "ninja",
            "args": [
                "-C",
                "${workspaceFolder}/build/release",
                "clean"
            ]
        },
        // {
        //     "type": "cppbuild",
        //     "label": "C/C++: g++.exe 生成活动文件",
        //     "command": "D:/Qt5.12.11/Tools/mingw730_64/bin/g++.exe",
        //     "args": [
        //         "-fdiagnostics-color=always",
        //         "-g",
        //         "${file}",
        //         "-o",
        //         "${fileDirname}\\${fileBasenameNoExtension}.exe"
        //     ],
        //     "options": {
        //         "cwd": "${workspaceFolder}"
        //     },
        //     "problemMatcher": [
        //         "$gcc"
        //     ],
        //     "group": {
        //         "kind": "build",
        //         "isDefault": false
        //     },
        //     "detail": "调试器生成的任务。"
        // },
        {
            "label": "Super Fast Debug Build & Run",
            "type": "shell",
            // "command": "cmake --preset debug_Ninja && ninja -C ${workspaceFolder}/build/debug -j0 && ${workspaceFolder}/build/debug/signbrain",
            "command": "ninja -C ${workspaceFolder}/build/debug -j4 && ${workspaceFolder}/build/debug/signbrain",
            "options": {
                "shell": {
                    "executable": "cmd.exe",
                    "args": ["/c"]
                }
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared",
                "showReuseMessage": false,
                "clear": true
            },
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": []
        },

    ]
}

launch.json

// launch.json,miDebuggerPath的值要替换一下,用来调试的
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "g++ - 生成和调试活动文件",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/build/debug/SignBrain.exe",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "setupCommands": [
        {
          "description": "为 gdb 启用整齐打印",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ],
      "preLaunchTask": "Build Debug",
      "miDebuggerPath": "D:/Qt/Tools/mingw1310_64/bin/gdb.exe"
    }
  ]
}
// c_cpp_properties.json,对应的值要替换一下,给ide防止显示错误的
// c_cpp_properties.json - 代码提示标准
// 只影响VS Code的IntelliSense(代码补全、错误提示、跳转定义)
// 告诉VS Code:"请按照这些标准来显示代码提示"
// 如果配置错误,只会影响编辑体验,不影响实际编译
{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                // Qt5 核心路径
                "D:/Qt5.12.11/5.12.11/mingw73_64/include",
                "D:/Qt5.12.11/5.12.11/mingw73_64/include/QtCore",
                "D:/Qt5.12.11/5.12.11/mingw73_64/include/QtGui",
                "D:/Qt5.12.11/5.12.11/mingw73_64/include/QtWidgets",
                "D:/Qt5.12.11/5.12.11/mingw73_64/include/QtPrintSupport",
                // mkspecs 对 Q_OBJECT 宏解析有帮助
                "D:/Qt5.12.11/5.12.11/mingw73_64/mkspecs/win32-g++",
                // CMake 输出里 Qt5Core 包含目录
                "D:/Qt5.12.11/5.12.11/mingw73_64/include/;D:/Qt5.12.11/5.12.11/mingw73_64/include/QtCore"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "cStandard": "c17",
            "cppStandard": "gnu++17",
            "intelliSenseMode": "windows-gcc-x64"
        }
    ],
    "version": 4
}

对应的文件调整完了以后,
先构建,构建进去CMakeLists.txt以后,ctrl+s,会自动构建,如果提示不知道怎么构建,ctrl+shift+p,选一下构建配置即可
在这里插入图片描述
编译是通过ctrl+shift+b,调用task.json的默认任务构建
f5是调试,ctrl+f5是调试但是不过断点,f5这一套通过launch.json,调用里面写的task来执行构建编译,然后调试的
不调试的话,ctrl+shift+b运行就行,还要使用windeployqt.exe signbrain.exe导入qt6的相关库即可,
在这里插入图片描述

3.4 问题处理

第一个问题,就是f5执行没反应,因为我装了这个,就快捷键冲突了,把他禁用得了,用的时候再打开
在这里插入图片描述

<think>首先,用户的问题是基于提供的引用材料:[1]是关于使用CMake管理Qt工程的入门,介绍了如何构建控制台和GUI应用;[2]讨论了CMake构建Qt项目,特别是跨平台开发;[3]提到了Qt和QML打包发布的工具,如Inno Setup等。用户的核心需求是:“使用Qt CMake和QML将项目打包为exe可执行程序的方法”。 根据系统指令: - 使用中文回答。 - 结构清晰,帮助用户逐步解决问题。 - 确保回答真实可靠;我可以基于通用知识补充,但引用材料是核心。 - 在末尾添加一个引用标识如[^1],根据指令:“回答中引用的段落末尾自然地添加引用标识”。 - 不需要添加新的引用标记,因为用户提供了引用[1]、[2]、[3],所以我应该在回答中引用它们。 - 生成相关问题:指令说“生成相关问题”,所以我要在回答结束时添加相关问题部分。 - LaTeX格式:如果涉及数学表达式,使用$...$或$$...$$,但这个问题可能不涉及数学,所以可能不需要。 关键点: - 用户想知道如何使用QtCMake和QML打包项目为exe文件。 - 引用[1]和[2]讨论CMake配置,[3]讨论打包工具。 - 在Qt中,打包exe通常涉及部署步骤,包括复制依赖的DLL文件、Qt插件等。 基于我的知识: - Qt提供工具如windeployqt或macdeployqt来帮助打包。 - CMake可以集成这些工具。 - 引用[3]提到第三方工具打包,如Inno Setup。 结构回答: 1. **简介和目标**:解释打包的重要性(确保exe能在其他机器运行)。 2. **步骤概述**:使用CMake配置Qt QML项目。 3. **打包方法**: - 使用Qt自带的部署工具。 - 使用第三方打包工具。 4. **详细步骤**:分步指导。 5. **引用**:自然地添加引用标识。 6. **相关问题**:生成相关问题。 确保引用: - 例如,当提到CMake配置时,引用[1]或[2]。 - 当提到打包工具时,引用[3]。 最终回答结构: - 步骤1: 创建和配置CMake项目。 - 步骤2: 构建项目。 - 步骤3: 使用windeployqt部署。 - 步骤4: 可选使用第三方工具打包。 - 结尾引用标识。 - §§相关问题§§ 生成相关问题: - 基于主题,如CMake配置优化、QML部署细节等。 </think>以下是针对您的问题——“使用QtCMake和QML将项目打包为exe可执行程序的方法”——的详细解答。该方法基于Qt的跨平台特性,结合CMake构建系统和QML界面技术实现。整个过程分为四个主要步骤:项目配置、构建、部署和打包。我会参考您提供的引用材料,确保回答真实可靠。整个流程以Windows平台为例,但原理适用于其他系统(需调整工具)。 ### 步骤1: 创建和配置Qt QML项目(基于CMake) 首先,确保您已安装QtCMake和编译器(如MSVC或MinGW)。使用CMake管理Qt项目是Qt6推荐的方式,它能自动处理Qt模块依赖和QML资源。 - 创建项目目录结构示例: ``` my_project/ ├── CMakeLists.txt # CMake配置文件 ├── main.cpp # 主程序入口 ├── main.qml # QML界面文件 └── qml/ # 可选:存放其他QML文件 ``` - 编写CMakeLists.txt文件:这是核心配置文件。引用[1]提到CMake作为跨平台构建工具的基本方法[^1],我们可以扩展它来支持QML应用。 ```cmake cmake_minimum_required(VERSION 3.16) project(MyApp LANGUAGES CXX) # 设置Qt6路径(根据您的安装调整) set(CMAKE_PREFIX_PATH "C:/Qt/6.5.0/mingw_64") # 查找所需的Qt模块 find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick) # Quick模块支持QML # 添加可执行文件 qt_add_executable(MyApp main.cpp ) # 添加QML文件作为资源(确保QML文件能被嵌入) qt_add_qml_module(MyApp URI MyApp VERSION 1.0 QML_FILES main.qml RESOURCE_PREFIX /qml ) # 链接Qt库 target_link_libraries(MyApp PRIVATE Qt6::Core Qt6::Gui Qt6::Quick ) ``` **说明**: - `qt_add_qml_module`确保QML文件被编译进应用资源,避免运行时路径问题。 - 如果您有多个QML文件,添加它们到`QML_FILES`或使用`RESOURCES`添加目录。 - 此配置参考了引用[2]中关于CMake构建Qt项目的跨平台方法[^2]。 ### 步骤2: 构建项目生成初步可执行文件 使用CMake生成构建系统并编译项目。这通常在命令行或IDE(如Qt Creator)中完成。 - 在项目根目录运行: ```bash cmake -B build -G "MinGW Makefiles" # 指定生成器(如Ninja或Visual Studio) cmake --build build --config Release ``` - 编译后,可执行文件位于`build/Release/MyApp.exe`(或类似路径)。 - **注意**:此时生成的exe文件还不能独立运行,因为它依赖Qt的DLL和QML插件。下一步是部署来解决这个问题。 ### 步骤3: 部署应用(复制运行时依赖) Qt提供工具自动复制所需的DLL、QML插件和资源文件。关键工具是`windeployqt`(Windows平台),它扫描exe文件并添加依赖项。 - 确保`windeployqt`在PATH中(通常位于Qt安装目录的`bin`子目录)。 - 在命令行运行(从构建目录): ```bash cd build/Release windeployqt MyApp.exe --qmldir ../../qml ``` **常用参数**: - `--qmldir`:指定QML文件目录路径(如`../../qml`),确保QML相关依赖被正确复制。 - `--release`:仅部署Release版本的库。 - `--no-translations`:跳过翻译文件以减小大小。 **部署后目录结构**: ``` Release/ ├── MyApp.exe ├── Qt6Core.dll # Qt核心库 ├── Qt6Quick.dll # QML引擎 ├── qml/ # QML插件和资源 ├── platforms/ # 平台插件 └── ... # 其他依赖文件 ``` - 现在,整个`Release`目录可以作为一个便携包在其他Windows机器运行(需相同架构)。 ### 步骤4: 打包为单一exe安装程序(可选) 部署后的目录包含多个文件。如果需要分发为单一exe安装程序,可以使用第三方打包工具。引用[3]提到如Inno Setup、NSIS等工具可以创建安装向导并压缩文件[^3]。 - 推荐使用Inno Setup(免费且易用): 1. 下载并安装Inno Setup(https://jrsoftware.org/isinfo.php)。 2. 创建一个脚本(.iss文件)指定部署目录: ```iss [Setup] AppName=MyApp AppVersion=1.0 DefaultDirName={pf}\MyApp OutputDir=Output OutputBaseFilename=MyApp_Installer Compression=lzma2 SolidCompression=yes [Files] Source: "build\Release\*"; DestDir: "{app}"; Flags: recursesubdirs [Icons] Name: "{commondesktop}\MyApp"; Filename: "{app}\MyApp.exe" ``` 3. 编译脚本生成installer.exe: - 打开Inno Setup,加载脚本并编译。 - 输出文件在`Output`目录,用户安装后会创建桌面快捷方式。 ### 注意事项和优化建议 - **跨平台兼容性**:在Linux或macOS上,使用类似工具如`macdeployqt`并结合CMake配置(引用[2]强调CMake的跨平台优势[^2])。 - **减小包大小**:在CMake中设置`QT_NO_DEBUG`以移除调试符号,或在windeployqt中添加`--no-system-d3d-compiler`忽略不必要的库。 - **QML特定问题**:如果QML界面使用图像或字体,确保在CMake中通过`RESOURCES`添加这些文件,避免运行时错误。 - **真实性问题**:以上方法基于Qt官方文档和通用实践。引用[1]证实了CMake管理Qt工程的基础[^1],而引用[3]介绍了打包工具的多样性[^3]。测试时,建议在虚拟机中验证可执行文件的独立性。 通过以上步骤,您可以将Qt CMake和QML项目打包为独立的exe安装程序。如果您提供具体项目细节,我可以给出更针对性建议。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值