万丈高楼平地起:开发环境搭建与“Hello, World”
目录
- 前言
- 一、我们的“建筑材料”清单
- 二、用CMake“绘制施工图”
- 三、编写“Hello, Libraries!”验证代码
- 四、编译运行,见证奇迹
- 五、AI辅助编程:为我们的“挖掘机”加装AI引擎
- 总结与展望
前言
在上一篇文章《专栏开篇:从一个想法到一套软件——我的AI质检平台设计蓝图》中,我们共同绘制了一份激动人心的蓝图。然而,再宏伟的蓝图,也需要一砖一瓦的实现。今天,我们就来打下整个项目的地基——搭建一个稳定、可靠、万事俱备的开发环境。
这一步或许有些枯燥,甚至会遇到各种恼人的报错,但请相信我,一个干净、配置正确的开发环境,是后续所有高效开发的保障。它能为你节省未来几十甚至上百个小时的调试时间。
废话不多说,让我们卷起袖子,开始搬砖!
一、我们的“建筑材料”清单
兵马未动,粮草先行。在编码之前,我们需要准备好所有的“建筑材料”。我将以Windows 10/11平台为例进行讲解,这是工业界最主流的操作系统之一。
- 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
下的CMake
和Ninja
必须勾选。
典型组件选择如下图所示:
-
Visual Studio 2022
Qt的MSVC版本需要依赖Visual Studio提供的C++编译器、链接器和相关库。访问Visual Studio官网下载并安装Visual Studio 2022 Community(社区版对个人开发者和开源项目免费)。安装过程中,需要在“工作负载”中选择“使用C++的桌面开发”。这个选项会自动安装所有必要的C++开发工具和Windows SDK,如下图所示。
-
图像处理库:OpenCV
- 版本: 推荐 OpenCV 4.8.0 或更高版本。
- 下载方式: 访问 OpenCV官方Releases页面,下载
Windows
版本的预编译包。 - 安装: 下载后得到的是一个自解压程序,将其解压到一个不含中文和空格的路径下,例如
D:\toolplace\opencv-4.11.0
。解压后,我们核心关注的是build
目录。
-
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来管理是最佳实践。它就像我们的“施工总图”,告诉编译器去哪里找头文件、链接哪个库。
-
创建项目目录结构
在你的工作区,创建一个项目根目录,例如AI_Quality_Inspection
,并建立如下结构:AI_Quality_Inspection/ |-- CMakeLists.txt # 我们的施工总图 |-- main.cpp # 我们的第一行代码
-
编写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;
}
四、编译运行,见证奇迹
- 用Qt Creator打开项目:点击
文件 -> 打开文件或项目
,选择我们写好的CMakeLists.txt
。 - 配置项目: Qt Creator会弹出“配置项目”对话框。在“构建套件(Kit)”中,选择你安装时勾选的
Desktop Qt 6.9.1 MSVC2022 64bit
(或类似) 选项。然后点击“配置项目”。 - 构建项目: 点击左下角的“锤子”图标,或者按
Ctrl+B
。观察下方的“编译输出”栏,如果没有红色报错,恭喜你,最难的一步已经过去了! - 运行项目: 点击“锤子”旁边的绿色“播放”按钮,或者按
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配置中遇到任何问题,欢迎在评论区留言交流。