OkEDU::构建开发::Windows

会飞的睡眠兔 2023-07-28 15:16:48

必要条件

  • 支持系统:Windows 10+
  • C++ 版本:C++20
  • Qt 版本:Qt 5.15.x

准备工具链环境

Windows 平台编译

目前在Windows 10测试通过,最好在Win10以上系统编译开发。

安装依赖

下载如下依赖库

配置环境变量

上一步,安装完依赖程序之后,打开命令行(或者按快捷键CTRL+r运行),输入命令SystemPropertiesAdvanced回车,
设置系统环境变量(用户级和系统级均可),如下

# 在原有PATH之上,增加如下(具体路径根据自己的安装路径修改)
PATH=C:\strawberry-perl\perl\bin;C:\Program Files\CMake\bin;C:\MinGW\bin;

Visual studio MSVC构建

  • 安装 Visual Studio 2022(社区版即可)
  • 配置选择[桌面开发]
  • SDK选择[Windows SDK 10]

准备 Qt 环境

动态和静态都支持

静态 Qt

下载静态版 Qt

由于需要静态版Qt,网上已经有现成编译好的无需自己再浪费时间构建,
位置:https://build-qt.fsu0413.me/
找到版本5.15.x最新静态64位静态64位静态64位版本,
比如我的:Qt5.15.6-Windows-x86_64-VS2019-16.11.18-staticFull-20220915.7z

解压到对应位置即可

放置位置:E:\Qt,比如我的:E:\Qt\Qt5.15.6-Windows-x86_64-VS2019-16.11.18-staticFull

配置环境变量

该步骤就需要配置环境变量指向Qt安装目录,以便于CMake能识别到Qt,请配置环境变量Qt5Static_HOME,方法如下:

# 桌面打开命令行(或者按快捷键CTRL+r运行),输入命令`SystemPropertiesAdvanced`回车
QTDIR=E:\Qt\Qt5.15.6-Windows-x86_64-VS2019-16.11.18-staticFull

动态 Qt

按照Qt安装包正常安装选择:

  • msvc64 位运行库即可。

安装相关依赖

构建第三方包

由于本项目依赖众多第三方库
为了提升项目构建效率,采用了 Conan 包管理工具,操作过程如下:

安装 Conan

Conan提供了Python库支持,安装Python3之后只需执行安装命令即可

2.x 版本因为ffmpeg暂时不支持,请下载v1.x版本

# 卸载最新版(如果已安装)
pip uninstall conan

# 安装 1.x 版本
pip install conan==1.59.0

安装依赖

安装命令如下

这个过程需要需要花费很长时间,由于网络原因可能中断,需要多次执行安装命令等到输出成功消息。

# 静态选项:compiler.runtime=MT 取消强依赖:--build=missing
conan install . -s compiler.runtime=MT --build=missing

准备 WebRTC 库

提供了两种方法选其一即可,参考如下:

  • 方法一:下载现成编译好的webrtc库;
  • 方法二:下载webrtc源码自行编译(大陆的网络由于某些原因几乎无法下载

极不建议该种方法,外面的同学可以试试!)。

方法一(推荐)

  • 下载对应包,地址如下:

    #位置:/okedu/webrtc, 请下载x64版本
    https://pan.baidu.com/s/1Q6HGMkbGKzNxaspnSib8BA 提取码: wqp2
    
  • 放置目录,结构如下:

    # 如果不存在的目录,请创建。
    3rdparty/webrtc/
    ├── libwebrtc-windows-x64
    │   ├── include
    │   ├── release
    

方法二(不推荐)

  • 科学配置Proxy修改自己的IP(位于大陆的同学)
# 设置proxy
set HTTP_PROXY=http://{ip}:{port}
set HTTPS_PROXY=http://{ip}:{port}
git config --global http.proxy socks5://{ip}:{port}
git config --global https.proxy socks5://{ip}:{port}
# 取消proxy
set HTTP_PROXY
set HTTPS_PROXY
git config --global --unset http.proxy
git config --global --unset https.proxy
  • 下载 depot_tools
#下载depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
# 设置环境变量:
set PATh=${depot_tools_dir};%PATH%
# 参考:
https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html
  • 下载 WebRTC 源码
# 准备目录
rd /s /q webrtc & mkdir webrtc
# 配置源码repo地址
gclient config --name src https://webrtc.googlesource.com/src
# 这个过程需要多次进行,且易断开
gclient sync
  • 执行编译

打开Powershell,执行如下命令:

# gn 配置
/webrtc/src$ gn gen  ../out/Release --args='is_debug = false rtc_include_tests = false use_lld = false enable_iterator_debugging = true use_custom_libcxx = false use_custom_libcxx_for_host = false'
# ninja 编译
/webrtc/src$ ../../depot_tools/ninja -C ../out/Release webrtc
# 创建头文件输出目录(/out/include)
New-Item ../out/include -ItemType Directory -Force
# 复制头文件,${WEBRTC_DIR}为webrtc代码目录
robocopy "$WEBRTC_DIR\src" "..\out\include" *.h *.hpp /S /NP /NS /NC /NFL /NDL
  • 放置目录,结构如下:
# 如果不存在的目录,请创建。
3rdparty/webrtc/
├── libwebrtc-windows-x64
│   ├── include
│   ├── release

准备 Gloox 库

配置项目

由于项目是基于XMPP协议,Gloox是该协议的实现库,本项目需要对其做了拓展
代码位于OkEDU-Gloox
。 用 visual studio 打开 gloox/gloox.sln 解决方案,右击项目属性,打开配置窗口配置项:

  • 目标:Release、x64
  • 属性->常规->配置类型:静态库(.lib)
  • 属性->高级->目标文件拓展名:.lib
  • 属性->C/C++->代码生成->运行库:多线程(/MT)
  • 属性->C/C++->预处理器->增加宏定义:HAVE_OPENSSL
  • 属性->C/C++->常规->附加包含目录:配置boringssl头文件: ${libwebrtc_dir}\include\third_party\boringssl\src\include
  • 属性->C/C++->优化->全程序优化: 否

生成目标

  • 方式1(VS)- 打开VS,点击菜单栏 [生成]->[全部生成](或者快捷键Ctrl+b)生成项目;
  • 方式2(MSBuild) - 打开 [x64 Native Tools Command Prompt for VS 2022]命令行,cd到代码目录执行msbuild gloox.vcxproj -property:Configuration=Release即可。
  • 导出头文件,执行如下命令。
# 执行拷贝头文件命令
E:\QtWorkspace\ok-edu-gloox>robocopy "src" "x64\include" *.h *.hpp /S /NP /NS /NC /NFL /NDL
# 查看输出目录
E:\QtWorkspace\ok-edu-gloox>dir x64
 Directory of E:\QtWorkspace\ok-edu-gloox\x64
2023/05/04  21:42    <DIR>          .
2023/05/04  21:42    <DIR>          ..
2023/04/27  21:21    <DIR>          include
2023/04/22  16:57    <DIR>          Release

配置 Gloox 依赖

拷贝gloox生成的依赖放到主项目,位置如下:

E:\QtWorkspace\ok-edu-classroom-desktop\3rdparty\gloox  #没有请创建
└── libgloox-windows-x64  #没有请创建
    ├── include/gloox/*.h #复制所有头文件(x64/include/*.h)到此处
    └── release/gloox.lib #复制gloox.lib库文件(x64/Release/gloox.lib去掉版本)到此处

最终3rdparty结构

OkEDU-Classroom-Desktop$ tree  -L 4 3rdparty/
3rdparty/
├── gloox
│   └── libgloox-linux-x86_64
│       ├── debug
│       │ ├── libgloox.a
│       └── include
│           └── gloox   //gloox 头文件目录
└── webrtc
    └── libwebrtc-linux-x86_64
        ├── debug
        │   └── libwebrtc.a
        └── include             //webrtc 头文件目录
            ├── api
            ├── audio
             --ignore--
            ├── tools
            └── video

开源地址

...全文
291 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

23

社区成员

发帖
与我相关
我的任务
社区描述
由个人开发者主导、社区驱动、致力于开源与商业融合,开发、维护以及推广开源自由等相关技术,提供有价值的技术服务。网址: okstar.org
开源软件开源程序员创富 企业社区 湖南省·长沙市
社区管理员
  • OkMSG
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧