VSCode 上部署 Qt6 开发环境

1. 前言

  1. 模板使用 cmake 与 ninja 构建项目,需要将二者添加到环境变量

  2. 模板使用 mingw64 编译项目,不需要添加到环境变量,使用临时环境变量以避免冲突

  3. c_cpp_properties.jsonlaunch.jsonsettings.json 三个文件中的编译器路径和动态库路径替换为自己的电脑环境中的实际路径即可

2. 项目结构

project:.
│——.gitignore
│——CMakeLists.txt
│——main.cpp
│——qt6-mingw-x64.cmake
│——readme.md
└─.vscode
     │——c_cpp_properties.json
     │——launch.json
     │——settings.json
     └─ tasks.json

3. vscode 项目配置

.vscode/c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Qt6.4.1",
            "includePath": [
                "${workspaceFolder}/**",
                "D:/Qt6/6.4.1/mingw_64/include",
                "D:/Qt6/6.4.1/mingw_64/include/ActiveQt",
                "D:/Qt6/6.4.1/mingw_64/include/Qt3DAnimation",
                "D:/Qt6/6.4.1/mingw_64/include/Qt3DCore",
                "D:/Qt6/6.4.1/mingw_64/include/Qt3DExtras",
                "D:/Qt6/6.4.1/mingw_64/include/Qt3DInput",
                "D:/Qt6/6.4.1/mingw_64/include/Qt3DLogic",
                "D:/Qt6/6.4.1/mingw_64/include/Qt3DQuick",
                "D:/Qt6/6.4.1/mingw_64/include/Qt3DQuickAnimation",
                "D:/Qt6/6.4.1/mingw_64/include/Qt3DQuickExtras",
                "D:/Qt6/6.4.1/mingw_64/include/Qt3DQuickInput",
                "D:/Qt6/6.4.1/mingw_64/include/Qt3DQuickRender",
                "D:/Qt6/6.4.1/mingw_64/include/Qt3DQuickScene2D",
                "D:/Qt6/6.4.1/mingw_64/include/Qt3DRender",
                "D:/Qt6/6.4.1/mingw_64/include/QtAxBase",
                "D:/Qt6/6.4.1/mingw_64/include/QtAxContainer",
                "D:/Qt6/6.4.1/mingw_64/include/QtAxServer",
                "D:/Qt6/6.4.1/mingw_64/include/QtBluetooth",
                "D:/Qt6/6.4.1/mingw_64/include/QtBodymovin",
                "D:/Qt6/6.4.1/mingw_64/include/QtCharts",
                "D:/Qt6/6.4.1/mingw_64/include/QtChartsQml",
                "D:/Qt6/6.4.1/mingw_64/include/QtConcurrent",
                "D:/Qt6/6.4.1/mingw_64/include/QtCore",
                "D:/Qt6/6.4.1/mingw_64/include/QtCore5Compat",
                "D:/Qt6/6.4.1/mingw_64/include/QtDataVisualization",
                "D:/Qt6/6.4.1/mingw_64/include/QtDataVisualizationQml",
                "D:/Qt6/6.4.1/mingw_64/include/QtDBus",
                "D:/Qt6/6.4.1/mingw_64/include/QtDesigner",
                "D:/Qt6/6.4.1/mingw_64/include/QtDesignerComponents",
                "D:/Qt6/6.4.1/mingw_64/include/QtDeviceDiscoverySupport",
                "D:/Qt6/6.4.1/mingw_64/include/QtFbSupport",
                "D:/Qt6/6.4.1/mingw_64/include/QtFreetype",
                "D:/Qt6/6.4.1/mingw_64/include/QtGui",
                "D:/Qt6/6.4.1/mingw_64/include/QtHarfbuzz",
                "D:/Qt6/6.4.1/mingw_64/include/QtHelp",
                "D:/Qt6/6.4.1/mingw_64/include/QtHttpServer",
                "D:/Qt6/6.4.1/mingw_64/include/QtJpeg",
                "D:/Qt6/6.4.1/mingw_64/include/QtJsonRpc",
                "D:/Qt6/6.4.1/mingw_64/include/QtLabsAnimation",
                "D:/Qt6/6.4.1/mingw_64/include/QtLabsFolderListModel",
                "D:/Qt6/6.4.1/mingw_64/include/QtLabsQmlModels",
                "D:/Qt6/6.4.1/mingw_64/include/QtLabsSettings",
                "D:/Qt6/6.4.1/mingw_64/include/QtLabsSharedImage",
                "D:/Qt6/6.4.1/mingw_64/include/QtLabsWavefrontMesh",
                "D:/Qt6/6.4.1/mingw_64/include/QtLanguageServer",
                "D:/Qt6/6.4.1/mingw_64/include/QtMultimedia",
                "D:/Qt6/6.4.1/mingw_64/include/QtMultimediaQuick",
                "D:/Qt6/6.4.1/mingw_64/include/QtMultimediaWidgets",
                "D:/Qt6/6.4.1/mingw_64/include/QtNetwork",
                "D:/Qt6/6.4.1/mingw_64/include/QtNetworkAuth",
                "D:/Qt6/6.4.1/mingw_64/include/QtNfc",
                "D:/Qt6/6.4.1/mingw_64/include/QtOpenGL",
                "D:/Qt6/6.4.1/mingw_64/include/QtOpenGLWidgets",
                "D:/Qt6/6.4.1/mingw_64/include/QtPacketProtocol",
                "D:/Qt6/6.4.1/mingw_64/include/QtPng",
                "D:/Qt6/6.4.1/mingw_64/include/QtPositioning",
                "D:/Qt6/6.4.1/mingw_64/include/QtPositioningQuick",
                "D:/Qt6/6.4.1/mingw_64/include/QtPrintSupport",
                "D:/Qt6/6.4.1/mingw_64/include/QtQml",
                "D:/Qt6/6.4.1/mingw_64/include/QtQmlCompiler",
                "D:/Qt6/6.4.1/mingw_64/include/QtQmlCore",
                "D:/Qt6/6.4.1/mingw_64/include/QtQmlDebug",
                "D:/Qt6/6.4.1/mingw_64/include/QtQmlDom",
                "D:/Qt6/6.4.1/mingw_64/include/QtQmlIntegration",
                "D:/Qt6/6.4.1/mingw_64/include/QtQmlLocalStorage",
                "D:/Qt6/6.4.1/mingw_64/include/QtQmlModels",
                "D:/Qt6/6.4.1/mingw_64/include/QtQmlWorkerScript",
                "D:/Qt6/6.4.1/mingw_64/include/QtQmlXmlListModel",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuick",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuick3D",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuick3DAssetImport",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuick3DAssetUtils",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuick3DGlslParser",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuick3DHelpers",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuick3DIblBaker",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuick3DParticles",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuick3DPhysics",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuick3DPhysicsHelpers",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuick3DRuntimeRender",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuick3DSpatialAudio",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuick3DUtils",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuickControls2",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuickControls2Impl",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuickControlsTestUtils",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuickDialogs2",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuickDialogs2QuickImpl",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuickDialogs2Utils",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuickLayouts",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuickParticles",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuickShapes",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuickTemplates2",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuickTest",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuickTestUtils",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuickTimeline",
                "D:/Qt6/6.4.1/mingw_64/include/QtQuickWidgets",
                "D:/Qt6/6.4.1/mingw_64/include/QtRemoteObjects",
                "D:/Qt6/6.4.1/mingw_64/include/QtRemoteObjectsQml",
                "D:/Qt6/6.4.1/mingw_64/include/QtRepParser",
                "D:/Qt6/6.4.1/mingw_64/include/QtScxml",
                "D:/Qt6/6.4.1/mingw_64/include/QtScxmlQml",
                "D:/Qt6/6.4.1/mingw_64/include/QtSensors",
                "D:/Qt6/6.4.1/mingw_64/include/QtSensorsQuick",
                "D:/Qt6/6.4.1/mingw_64/include/QtSerialBus",
                "D:/Qt6/6.4.1/mingw_64/include/QtSerialPort",
                "D:/Qt6/6.4.1/mingw_64/include/QtShaderTools",
                "D:/Qt6/6.4.1/mingw_64/include/QtSpatialAudio",
                "D:/Qt6/6.4.1/mingw_64/include/QtSql",
                "D:/Qt6/6.4.1/mingw_64/include/QtStateMachine",
                "D:/Qt6/6.4.1/mingw_64/include/QtStateMachineQml",
                "D:/Qt6/6.4.1/mingw_64/include/QtSvg",
                "D:/Qt6/6.4.1/mingw_64/include/QtSvgWidgets",
                "D:/Qt6/6.4.1/mingw_64/include/QtTest",
                "D:/Qt6/6.4.1/mingw_64/include/QtTextToSpeech",
                "D:/Qt6/6.4.1/mingw_64/include/QtTools",
                "D:/Qt6/6.4.1/mingw_64/include/QtUiPlugin",
                "D:/Qt6/6.4.1/mingw_64/include/QtUiTools",
                "D:/Qt6/6.4.1/mingw_64/include/QtVirtualKeyboard",
                "D:/Qt6/6.4.1/mingw_64/include/QtWebChannel",
                "D:/Qt6/6.4.1/mingw_64/include/QtWebSockets",
                "D:/Qt6/6.4.1/mingw_64/include/QtWebView",
                "D:/Qt6/6.4.1/mingw_64/include/QtWebViewQuick",
                "D:/Qt6/6.4.1/mingw_64/include/QtWidgets",
                "D:/Qt6/6.4.1/mingw_64/include/QtXml",
                "D:/Qt6/6.4.1/mingw_64/include/QtZlib",
                "D:/Qt6/Tools/mingw1120_64/lib/gcc/x86_64-w64-mingw32/11.2.0/include/c++",
                "D:/Qt6/Tools/mingw1120_64/lib/gcc/x86_64-w64-mingw32/11.2.0/include/c++/x86_64-w64-mingw32"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "windows-gcc-x64",
            "compilerPath": "D:/Qt6/Tools/mingw1120_64/bin/g++.exe"
        }
    ],
    "version": 4
}
.vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/bin/main",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:/Qt6/Tools/mingw1120_64/bin/gdb.exe",
            "preLaunchTask": "build"
        }
    ]
}
.vscode/settings.json
{
    "terminal.integrated.defaultProfile.windows": "PowerShell",
    "terminal.integrated.profiles.windows": {
        "PowerShell": {
            "source": "PowerShell",
            "icon": "terminal-powershell",
            "env": {
                "PATH": "${env:path}D:/Qt6/6.4.1/mingw_64/bin;D:/Qt6/Tools/mingw1120_64/bin"
            }
        },
        "Command Prompt": null,
        "Git Bash": null
    }
}
.vscode/tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "generate",
            "type": "shell",
            "command": "cmake",
            "args": [
                "-S",
                ".",
                "-B",
                "build",
                "-G",
                "Ninja"
            ]
        },
        {
            "label": "build",
            "type": "shell",
            "dependsOn": "generate",
            "command": "cmake",
            "args": [
                "--build",
                "build"
            ]
        }
    ]
}

4. cmake 脚本

CMakeLists.txt
#Reference: 
# https://doc.qt.io/qt-6/cmake-get-started.html

cmake_minimum_required(VERSION 3.20)

set(CMAKE_TOOLCHAIN_FILE qt6-mingw-x64.cmake)

project(main VERSION 1.0.0 LANGUAGES CXX)

# 查找 Qt6 的模块
find_package(Qt6 REQUIRED COMPONENTS Widgets)
qt_standard_project_setup()
 
aux_source_directory(. PROJECT_SRC_LIST)
add_executable(${PROJECT_NAME} ${PROJECT_SRC_LIST})

target_link_libraries(${PROJECT_NAME} 
    PRIVATE Qt6::Widgets
)

# 发布程序时不创建控制台窗口
if(CMAKE_BUILD_TYPE STREQUAL Release)
    set_target_properties(${PROJECT_NAME} PROPERTIES WIN32_EXECUTABLE ON)
endif()

# 将需要的动态库拷贝到输出目录
add_custom_command(
    TARGET  ${PROJECT_NAME}
    POST_BUILD COMMAND ${QT6_WINDEPLOY} --no-translations
    ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.exe)
qt6-mingw-x64.cmake
# string(REGEX REPLACE ".*/\(.*\)" "\\1" CURDIR ${CMAKE_CURRENT_SOURCE_DIR})

message(STATUS USING_TOOLCHAIN:${CMAKE_TOOLCHAIN_FILE})

# flags
# set(DBGFLG "-gdwarf-2 -Og")
# set(LIBFLG "-lc -lm -lnosys")
set(LINKFLG "-Wl,-Map=target.map,--cref -Wl,--gc-sections")
set(PROJECT_FLAGS "-Wall -Wshadow -fdata-sections -ffunction-sections")

# compiler
set(CMAKE_ASM_COMPILER gcc.exe) # -x assembler-with-cpp
set(CMAKE_ASM_FLAGS_DEBUG "${PROJECT_FLAGS} ${DBGFLG}")
set(CMAKE_ASM_FLAGS_RELEASE "${PROJECT_FLAGS} -O3")

set(CMAKE_C_COMPILER gcc.exe)
set(CMAKE_C_FLAGS_DEBUG "${PROJECT_FLAGS} ${DBGFLG}")
set(CMAKE_C_FLAGS_RELEASE "${PROJECT_FLAGS} -O3")
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)

set(CMAKE_CXX_COMPILER g++.exe)
set(CMAKE_CXX_FLAGS_DEBUG "${PROJECT_FLAGS} ${DBGFLG}")
set(CMAKE_CXX_FLAGS_RELEASE "${PROJECT_FLAGS} -O3")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_EXE_LINKER_FLAGS "${LIBFLG} ${LINKFLG}")

# other tools
set(QT6_WINDEPLOY windeployqt.exe)
set(CMAKE_OBJCOPY objcopy.exe)
set(CMAKE_OBJDUMP objdump.exe)
set(CMAKE_SIZE size.exe)
set(CMAKE_DEBUGER gdb.exe)
set(CMAKE_CPPFILT c++filt.exe)

# output type and destination
set(CMAKE_BUILD_TYPE Debug)
set(PROJECT_BINARY_DIR ${PROJECT_SOURCE_DIR}/build)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)

5. 程序入口

main.cpp
#include <qapplication.h>
#include <qmainwindow.h>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QMainWindow main;
    main.show();
    return app.exec();
}

6. 完整项目

点我下载

posted @   尽千帆  阅读(1648)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)
点击右上角即可分享
微信分享提示