wsl 编译android_Qt VisualStudio新增“交叉编译”,助力界面开发

Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用。而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式设备,Android(Necessitas)和iOS的端口上运行。现在我们为你提供了免费的试用版。前往慧都网下载最新版Qt体验吧!

前往慧都网获取更多文章教程

Qt Visual Studio工具现在支持 Qt项目的交叉编译。由于Qt / MSBuild和Linux开发VS工作负载的集成,使其成为可能。在本文中,我们将展示如何使用此功能在Visual Studio中通过Qt Quick创建嵌入式应用程序。

我们将开发用于在镜像屏幕上显示公共信息的应用程序。这些是在休息区,洗手间等安装的一部分。该应用程序将在嵌入式Linux的设备上运行。在本文中,我们将使用运行Raspbian(Buster)的Raspberry Pi 3 ModelB。

5afc2580fbf4bc41781a1cc213dda38f.png

我们在目标设备上运行Qt Quick嵌入式应用程序

准备开发环境

开发主机将是Windows 10计算机。必须安装Visual Studio 2019,包括桌面开发和Linux开发工作负载。

c353dfab84fcb785dc9059852dfa886a.png

所需的Visual Studio工作负载

我们将在Windows Linux子系统(WSL)的实例中运行交叉编译器。设置开发环境的下一步是启用WSL并安装Linux发行版。然后应该可以打开终端窗口并运行Linux命令。

user@buildhost:~$ uname -srvoLinux 4.4.0-18362-Microsoft #836-Microsoft Mon May 05 16:04:00 PST 2020 GNU/Linuxuser@buildhost:~$

WSL中的命令行外壳

要使用Qt Visual Studio工具,必须至少有一个Windows版Qt安装可用。出于测试目的,这还将允许在开所发的应用程序上运行。

19e8750edd6da7a62204b0435163dfdb.png

开发环境概述

交叉编译Qt

现在,我们可以继续设置交叉编译器。我们可以安装预构建的工具链,也可以编译自己的工具链。如果一切顺利,那么我们应该能够在设备上运行一个简单的程序。

user@buildhost:~$ echo "#include " > main.cppuser@buildhost:~$ echo "int main() {" >> main.cppuser@buildhost:~$ echo "std::cout << "Hello World from Raspberry Pi";" >> main.cppuser@buildhost:~$ echo "return 0;" >> main.cppuser@buildhost:~$ echo "}" >> main.cppuser@buildhost:~$ /opt/cross-pi-gcc-8.3.0/bin/arm-linux-gnueabihf-g++ main.cppuser@buildhost:~$ scp a.out pi@192.168.1.99:/home/pipi@192.168.1.99's password:a.out    100% 12KB 218.1KB/s 00:00user@buildhost:~$ ssh pi@192.168.1.99 ./a.outpi@192.168.1.99's password:Hello World from Raspberry Piuser@buildhost:~$

在Raspberry Pi上运行“ Hello World”

我们准备为Raspberry Pi构建Qt。为此,我们将遵循“spberryPi2EGLFS — A modern guide for cross-compiling Qt for HW accelerated OpenGL with eglfs on Raspbian and setting up Qt Creator”教程。构建完成后,我们应该能够在Raspberry Pi上运行示例Qt应用程序。

user@buildhost:~$ echo "#include " > main.cpp user@buildhost:~$ echo "int main() {" >> main.cpp user@buildhost:~$ echo "qInfo() << "Hello World with Qt version" << qVersion();" >> main.cpp user@buildhost:~$ echo "return 0;" >> main.cpp user@buildhost:~$ echo "}" >> main.cpp user@buildhost:~$ echo "SOURCES += main.cpp" > hello.pro user@buildhost:~$ raspi/qt5/bin/qmake user@buildhost:~$ make -s user@buildhost:~$ scp hello pi@192.168.1.99:/home/pi pi@192.168.1.99's password: hello 100% 12KB 359.6KB/s 00:00 user@buildhost:~$ ssh pi@192.168.1.99 ./hello pi@192.168.1.99's password: Hello World with Qt version 5.12.9 user@buildhost:~$user@buildhost:~$ echo "int main() {" >> main.cppuser@buildhost:~$ echo "qInfo() << "Hello World with Qt version" << qVersion();" >> main.cppuser@buildhost:~$ echo "return 0;" >> main.cppuser@buildhost:~$ echo "}" >> main.cppuser@buildhost:~$ echo "SOURCES += main.cpp" > hello.prouser@buildhost:~$ raspi/qt5/bin/qmakeuser@buildhost:~$ make -suser@buildhost:~$ scp hello pi@192.168.1.99:/home/pipi@192.168.1.99's password:hello 100% 12KB 359.6KB/s 00:00user@buildhost:~$ ssh pi@192.168.1.99 ./hellopi@192.168.1.99's password:Hello World with Qt version 5.12.9user@buildhost:~$

在Raspberry Pi上运行Qt示例应用程序

设置Qt Visual Studio工具

要从IDE 安装Qt Visual Studio工具,请打开Extensions > Manage Extensions。搜索“ qt”:结果应显示“ Qt Visual Studio Tools”扩展名;选择它,然后按“下载”。关闭VS,然后按照安装说明进行操作。重新打开VS后,Qt Visual Studio工具应该可用。

7e98a707-e513-eb11-8da9-e4434bdf6706.png

Qt Visual Studio工具菜单

要使用Qt Visual Studio Tools,我们必须首先注册将要使用的Qt版本。我们将从为Windows注册Qt开始。

  • 打开“Qt VS Tools > Qt Options”,然后在“ Qt版本”选项卡上按“Add”。
  • 提供名称和Qt安装的路径。
82a7d2c80a8ad76d58dc1bd48f48e13f.png

在Qt VS工具中注册Windows版Qt

现在,我们将注册驻留在WSL实例中的Qt的交叉编译版本。

  • 再次在“ Qt版本”选项卡上按“add”以打开“Add New Qt Version”对话框。
  • 将“Build Host”设置为“ Linux WSL”。(如果我们使用的是物理构建主机,而不是通过WSL使用虚拟构建主机,则可以选择“ Linux SSH”。)
  • 提供Qt安装的名称和路径,以及要使用的编译器(默认为g ++)。在这里,我们将提供交叉编译器的路径。
ce7a87be7f4adcd5ca2e5c8ad5044f2d.png

为Raspberry Pi注册Qt版本

创建一个多平台的Qt Quick项目

在注册了将要使用的Qt版本之后,我们现在可以创建一个Qt项目。

  • 选择“ File > New > Project”以打开“ Visual Studio”对话框以创建新项目
  • 在项目模板搜索中输入“ qt”,然后选择“ Qt Quick Application”
  • 按“Next”;提供项目的名称和位置,然后按“Create”。
  • “Qt Quick Application Wizard”对话框将打开。按“Next >>”进行配置设置。
  • 为Windows和Qt的Raspberry Pi版本添加项目配置。
f17f57e8d790b5023d6280b4f2b156ef.png

新项目配置

按“Finish”以完成项目创建向导。Visual Studio现在应该显示新的多平台Qt Quick项目。选择Windows配置,然后按F5键构建并运行该应用程序。然后应打开带有“ Hello World”标题的空窗口。

使用WSL在Visual Studio中交叉编译

使用WSL实例运行交叉编译器比使用SSH连接到构建主机更快。使用SSH时,MSBuild必须首先将源文件上传到远程主机。另一方面,WSL将在中安装本地驱动器/mnt,从而使文件访问瞬间完成。在这种情况下,MSBuild将Windows路径映射到根于的相应Linux路径/mnt,例如:

  • C:includefoolib maps to /mnt/c/include/foolib ✔️

MSBuild将假定属性页中提供的路径是本地路径,并将它们映射到/mnt。在属性页中使用绝对Linux路径时,这可能导致错误的映射,例如:

  • /home/user/raspi maps to /mnt/home/user/raspi ❌

为了避免这个问题,我们将在/mnt中创建指向WSL实例文件系统中其他顶层目录的符号链接。

user@buildhost:/mnt$ sudo ln -s /home homeuser@buildhost:/mnt$ ls -gototal 0drwxrwxrwx 1 4096 Sep 1 15:29 cdrwxrwxrwx 1 4096 Sep 1 15:29 ddrwxrwxrwx 1 4096 Sep 1 15:29 elrwxrwxrwx 1 5 Sep 1 17:10 home -> /homeuser@buildhost:/mnt$

在中创建符号链接 /mnt

现在,我们可以交叉编译该项目了。选择一个Linux配置,然后按F7键开始构建。

1>------ Rebuild All started: Project: QuickMirror, Configuration: Release_RPi x64 ------1>Invoking 'mkdir -p $(dirname /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/qmake/temp/props.txt); mkdir -p /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/qmake/temp; cd /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/qmake/temp; ("/home/user/raspi/qt5/bin/qmake" -query) 1> props.txt', working directory: '/mnt/c/Users/user/Source/Repos/QuickMirror'1>Reading Qt configuration (/home/user/raspi/qt5/bin/qmake)1>Invoking 'mkdir -p $(dirname /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/qmake/temp/qtvars.pro); mkdir -p $(dirname /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/qmake/temp/Makefile); mkdir -p $(dirname /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/qmake/temp/qtvars.log); mkdir -p /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/qmake/temp; cd /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/qmake/temp; ("/home/user/raspi/qt5/bin/qmake" "CONFIG -= debug release debug_and_release" "CONFIG += release" qtvars.pro) 1> qtvars.log 2>&1', working directory: '/mnt/c/Users/user/Source/Repos/QuickMirror'1>rcc qml.qrc1>Invoking 'mkdir -p $(dirname qml.qrc); mkdir -p $(dirname /mnt/c/Users/user/Source/Repos/QuickMirror/main.qml); mkdir -p $(dirname /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/rcc/qrc_qml.cpp); (/home/user/raspi/qt5/bin/rcc /mnt/c/Users/user/Source/Repos/QuickMirror/qml.qrc --name qml -o /mnt/c/Users/user/Source/Repos/QuickMirror/obj/x64/Release_RPi/rcc/qrc_qml.cpp)', working directory: '/mnt/c/Users/user/Source/Repos/QuickMirror'1>Starting remote build1>Compiling sources:1>main.cpp1>qrc_qml.cpp1>Linking objects1>QuickMirror.vcxproj -> C:甥敳獲userSourceReposQuickMirrorbinx64Release_RPiQuickMirror.out1>Done building project "QuickMirror.vcxproj".========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

VS中的交叉编译Qt项目

接下来

总而言之,我们在Visual Studio中创建了一个多平台的Qt Quick项目,并使用交叉编译器为Raspberry Pi构建了该项目。在第2部分中,我们将研究:

  • 部署和运行应用程序
  • QML中的应用程序代码
  • 在目标设备中调试

未完待续。。。。。。。

本篇文章中的内容你都学会了吗?如果这篇文章没能满足你的需求可前往慧都网获取更多文章教程!

点击“了解更多”获取更多Qt开发工具以及文章教程!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值