当前位置: 首页 > news >正文

万丈高楼平地起:开发环境搭建与“Hello, World”

目录

  • 前言
  • 一、我们的“建筑材料”清单
  • 二、用CMake“绘制施工图”
  • 三、编写“Hello, Libraries!”验证代码
  • 四、编译运行,见证奇迹
  • 五、AI辅助编程:为我们的“挖掘机”加装AI引擎
  • 总结与展望

前言

在上一篇文章《专栏开篇:从一个想法到一套软件——我的AI质检平台设计蓝图》中,我们共同绘制了一份激动人心的蓝图。然而,再宏伟的蓝图,也需要一砖一瓦的实现。今天,我们就来打下整个项目的地基——搭建一个稳定、可靠、万事俱备的开发环境。

这一步或许有些枯燥,甚至会遇到各种恼人的报错,但请相信我,一个干净、配置正确的开发环境,是后续所有高效开发的保障。它能为你节省未来几十甚至上百个小时的调试时间。

废话不多说,让我们卷起袖子,开始搬砖!

一、我们的“建筑材料”清单

兵马未动,粮草先行。在编码之前,我们需要准备好所有的“建筑材料”。我将以Windows 10/11平台为例进行讲解,这是工业界最主流的操作系统之一。

  1. IDE与编译器:Qt Creator + MSVC
    • 核心工具: Qt (我这里使用最新的 Qt 6.9.1 版本)
    • 下载方式: 通过 Qt官方下载器 进行在线安装。
    • 安装选项: 注册账户后,在组件选择页面,请务必勾选以下几项:
      • MSVC 2022 64-bit
      • Qt 6.9 for Desktop Development 下的 MinGW 可以不选,我们统一使用MSVC。
      • Developer and Designer Tools 下的 CMakeNinja 必须勾选。

典型组件选择如下图所示:
在这里插入图片描述
在这里插入图片描述

  1. Visual Studio 2022
    Qt的MSVC版本需要依赖Visual Studio提供的C++编译器、链接器和相关库。访问Visual Studio官网下载并安装Visual Studio 2022 Community(社区版对个人开发者和开源项目免费)。安装过程中,需要在“工作负载”中选择“使用C++的桌面开发”。这个选项会自动安装所有必要的C++开发工具和Windows SDK,如下图所示。
    在这里插入图片描述

  2. 图像处理库:OpenCV

    • 版本: 推荐 OpenCV 4.8.0 或更高版本。
    • 下载方式: 访问 OpenCV官方Releases页面,下载 Windows 版本的预编译包。
    • 安装: 下载后得到的是一个自解压程序,将其解压到一个不含中文和空格的路径下,例如 D:\toolplace\opencv-4.11.0。解压后,我们核心关注的是 build 目录。
  3. AI推理库:ONNX Runtime

    • 版本: 推荐 1.18.0 或更高版本。
    • 下载方式: 访问 ONNX Runtime的GitHub Releases页面。
    • 选择: 在Assets列表中,找到与你的编译器版本对应的预编译包。例如,如果你安装了Visual Studio 2022,就下载 onnxruntime-win-x64-1.22.1.zip
    • 安装: 同样,将其解压到一个不含中文和空格的路径,例如 D:\toolplace\onnxruntime-1.22.1

二、用CMake“绘制施工图”

现代C++项目,尤其是有多个第三方库依赖的项目,使用CMake来管理是最佳实践。它就像我们的“施工总图”,告诉编译器去哪里找头文件、链接哪个库。

  1. 创建项目目录结构
    在你的工作区,创建一个项目根目录,例如 AI_Quality_Inspection,并建立如下结构:

    AI_Quality_Inspection/
    |-- CMakeLists.txt      # 我们的施工总图
    |-- main.cpp            # 我们的第一行代码
    
  2. 编写CMakeLists.txt
    这是本篇的核心。请仔细阅读注释,理解每一行的作用。

# CMake最低版本要求
cmake_minimum_required(VERSION 3.16)# 项目名称
project(AI_Quality_Inspection VERSION 1.0 LANGUAGES CXX)# 设置C++标准为C++17,Qt6和现代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)# --- 寻找核心库 ---# 1. 寻找 Qt6
# 我们声明需要Core, Gui(用于窗口系统)Quick(用于QML)模块
find_package(Qt6 COMPONENTS Core Gui Quick REQUIRED)# 2. 寻找 OpenCV
# 设置OpenCV的根目录,请修改为你自己的路径!
set(OpenCV_DIR "D:/toolplace/opencv-4.11.0/build") 
find_package(OpenCV REQUIRED)# 3. 寻找 ONNX Runtime
# 我们需要手动指定头文件和库文件的路径
set(ONNX_ROOT "D:/toolplace/onnxruntime-1.22.1")
# 头文件路径
include_directories(${ONNX_ROOT}/include)
# 库文件路径
link_directories(${ONNX_ROOT}/lib)# --- 创建可执行文件 ---
add_executable(mainApp main.cpp)# --- 链接所有依赖库 ---
target_link_libraries(mainApp PRIVATE# 链接Qt6的模块Qt6::CoreQt6::GuiQt6::Quick # 为后续QML做准备# 链接OpenCV的模块 (会自动链接所有主要模块)${OpenCV_LIBS}# 链接ONNX Runtime的库onnxruntime
)# --- 添加头文件目录 ---
target_include_directories(mainApp PRIVATE${CMAKE_CURRENT_SOURCE_DIR}# 添加OpenCV的头文件目录${OpenCV_INCLUDE_DIRS}
)# Windows平台下,运行时需要将dll复制到可执行文件目录
# 这里我们添加一个自定义命令,在编译后自动复制
if(WIN32)add_custom_command(TARGET mainApp POST_BUILDCOMMAND ${CMAKE_COMMAND} -E copy_if_different"${OpenCV_DIR}/x64/vc16/bin/opencv_world4110.dll"$<TARGET_FILE_DIR:mainApp>)add_custom_command(TARGET mainApp POST_BUILDCOMMAND ${CMAKE_COMMAND} -E copy_if_different"${ONNX_ROOT}/lib/onnxruntime.dll"$<TARGET_FILE_DIR:mainApp>)
endif()

三、编写“Hello, Libraries!”验证代码

我们的“Hello, World”有点不一样。它不只打印一行文字,而是要唤醒我们引入的所有库,让它们“自报家门”。如果所有库都能成功报告自己的版本号,就证明我们的环境搭建和CMake配置彻底成功了!

编辑 main.cpp 文件:

#include <iostream>// 引入QGuiApplication,它是所有GUI应用的入口,包括QML
#include <QGuiApplication>
#include <QtGlobal>// 引入OpenCV的核心头文件
#include <opencv2/core.hpp>// 引入ONNX Runtime的C++ API头文件
#include <onnxruntime_cxx_api.h>int main(int argc, char *argv[])
{// 使用 QGuiApplication创建主窗体QGuiApplication app(argc, argv);std::cout << "--- AI Quality Inspection Platform Environment Test ---" << std::endl;// --- 1. 打印Qt版本 ---std::cout << "1. Qt Version: " << qVersion() << std::endl;// --- 2. 打印OpenCV版本 ---std::cout << "2. OpenCV Version: " << CV_VERSION << std::endl;// --- 3. 打印ONNX Runtime版本 ---try{// 创建OrtApi对象是使用ONNX Runtime的第一步const OrtApi* ort_api = OrtGetApiBase()->GetApi(ORT_API_VERSION);if (ort_api){// OrtApi没有直接的版本字符串函数,我们通过成功获取API来验证std::cout << "3. ONNX Runtime: API access successful. (Verified)" << std::endl;}else{std::cout << "3. ONNX Runtime: Failed to get API." << std::endl;}}catch (const std::exception& e){std::cout << "3. ONNX Runtime: Exception during initialization - " << e.what() << std::endl;}std::cout << "-----------------------------------------------------" << std::endl;std::cout << "Congratulations! Your environment is clean and ready for QML." << std::endl;std::cout << "You can close this window now." << std::endl;// 我们暂时不需要事件循环,直接返回return 0;
}

四、编译运行,见证奇迹

  1. 用Qt Creator打开项目:点击 文件 -> 打开文件或项目,选择我们写好的 CMakeLists.txt
  2. 配置项目: Qt Creator会弹出“配置项目”对话框。在“构建套件(Kit)”中,选择你安装时勾选的 Desktop Qt 6.9.1 MSVC2022 64bit (或类似) 选项。然后点击“配置项目”。
  3. 构建项目: 点击左下角的“锤子”图标,或者按 Ctrl+B。观察下方的“编译输出”栏,如果没有红色报错,恭喜你,最难的一步已经过去了!
  4. 运行项目: 点击“锤子”旁边的绿色“播放”按钮,或者按 Ctrl+R

如果一切顺利,你将看到一个控制台窗口弹出,并显示如下内容:

--- AI Quality Inspection Platform Environment Test ---
1. Qt Version: 6.9.1
2. OpenCV Version: 4.11.0
3. ONNX Runtime: API access successful. (Verified)
-----------------------------------------------------
Congratulations! Your environment is clean and ready for QML.
You can close this window now.

看到这个界面,请给自己一点掌声!我们成功地将三个强大的轮子装在了一起,为我们即将建造的AI跑车打好了底盘。

五、AI辅助编程:为我们的“挖掘机”加装AI引擎

我们已经手动搭建好了坚实的地基,就像是拥有了一台性能强悍的“挖掘机”。但在这个AI时代,聪明的工程师懂得如何给自己的工具加装“AI引擎”,让工作效率倍增。这个引擎,就是 GitHub Copilot

Qt Creator从较新的版本开始,已经内置了对Copilot的支持。它就像一个时刻在你身边、经验丰富的编程伙伴,能根据你的代码上下文或注释,自动为你补全代码、生成函数,甚至编写测试。

详细安装方式请参考另一篇博客,本文不再赘述。

配置完成后,Copilot就已经开始工作了。它会在你编码时以灰色文本的形式给出建议。按 Tab 键即可采纳。

总结与展望

今天,我们不仅成功地搭建了包含Qt、OpenCV和ONNX Runtime的坚实开发环境,还为我们的IDE装备了Copilot这个强大的AI助手。这意味着,我们后续的开发之旅将会更加顺畅和高效。

地基已稳,引擎已装。从下一篇文章开始,我们将正式进入“主体结构施工”阶段。我们的第一个目标,就是深入C++后端,亲手封装ONNX Runtime,打造一个优雅、易用、可复用的通用AI推理引擎类。这将是我们整个平台的心脏。

敬请期待!如果你在环境搭建或Copilot配置中遇到任何问题,欢迎在评论区留言交流。

http://www.dtcms.com/a/277553.html

相关文章:

  • STM32中EXTI(外部中断)详解
  • Vue中的render()函数
  • word中多行合一功能实现
  • python基础知识pip配置pip.conf文件
  • Tableau破解安装
  • ROS2---NodeOptions
  • 数据预处理
  • 基于requests_html的爬虫实战
  • UE5多人MOBA+GAS 20、添加眩晕
  • 基于Flink的实时开发平台-Dinky
  • 基于Leaflet调用天地图在线API的多层级地名检索实战
  • LeetCode第 458 场周赛题解
  • 复习笔记 35
  • PHP语法高级篇(二):文件处理
  • c++ thread_local
  • Java求职面试:从Spring到微服务的全面挑战
  • 牛客周赛 Round 100
  • Android事件分发机制完整总结
  • CMSIS(Cortex Microcontroller Software Interface Standard)ARM公司为 Cortex-M 系列处理器
  • 互联网大厂Java面试:从Spring Boot到微服务的场景应用
  • 2024CVPR:Question Aware Vision Transformer for Multimodal Reasoning介绍
  • 考研复习-数据结构-第六章-图
  • RedisJSON 技术揭秘(五)`JSON.ARRPOP` 原子弹出 修改数组的终极手段
  • git实操
  • HTML 标题标签
  • 香港理工大学实验室定时预约
  • 【windows办公小助手】快速搜索文件及文件所处目录everything
  • 内存对齐与缓存优化:从硬件原理到代码实战
  • 前端进阶之路-从传统前端到VUE-JS(第五期-路由应用)
  • 通信网络编程5.0——JAVA