Go-Qt5开发之Windows10安装配置(1)

开发环境

  • 系统:windows10
  • Go版本:1.14
  • Msys2版本:20190524(最新x64)
  • Git:2.25
  • Go开发工具:goland-2019.3.1
  • Qt5 版本: 5.13.2 (推荐5.13,具体看官网)

安装Qt,两种方式(这里采用官方版本方式):

  • MSYS2 安装
  • 官方版本安装

MSYS2 安装

MSYS2介绍

MSYS2 (Minimal SYStem 2) 是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境。同时它也是一个在Cygwin (POSIX 兼容性层) 和 MinGW-w64(从"MinGW-生成")基础上产生的,追求更好的互操作性的 Windows

MSYS2是什么编辑

MSYS2是MSYS的一个升级版,准确的说是集成了pacman和Mingw-w64的Cygwin升级版, 提供了bash shell等linux环境、版本控制软件(git/hg)和MinGW-w64 工具链。与MSYS最大的区别是移植了 Arch Linux的软件包管理系统 Pacman(其实是与Cygwin的区别)。

安装

直接下一步就好,具体看以下资料。

更换国内源

教程

https://www.cnblogs.com/feipeng8848/p/10037962.html
https://www.cnblogs.com/findumars/p/6546088.html

更换内容

简单的说 ..\msys64\etc\pacman.d 目录下有三个文件。 
mirrorlist.msys 
mirrorlist.mingw64 
mirrorlist.mingw32

# 这里安装在D盘D:\DevelopProgram\msys64,所以可以直接在D:\DevelopProgram\msys64\mingw64\etc\pacman.d下直接修改文件
# 或者在msys2里直接 vim /etc/pacman.d下修改


mirrorlist.msys:
##
## MSYS2 repository mirrorlist
##
## Primary
## msys2.org
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/
Server = http://repo.msys2.org/msys/$arch
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/$arch
Server = http://www2.futureware.at/~nickoe/msys2-mirror/msys/$arch/


mirrorlist.mingw64:
##
## 64-bit Mingw-w64 repository mirrorlist
##
## Primary
## msys2.org
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
Server = http://repo.msys2.org/mingw/x86_64
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/x86_64
Server = http://www2.futureware.at/~nickoe/msys2-mirror/x86_64/
Server = http://mirror.bit.edu.cn/msys2/REPOS/


mirrorlist.mingw32:
##
## 32-bit Mingw-w64 repository mirrorlist
##
## Primary
## msys2.org
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/
Server = http://repo.msys2.org/mingw/i686
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/i686
Server = http://www2.futureware.at/~nickoe/msys2-mirror/i686/

通过以下命令来更新MSYS2系统文件包:

pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime

更新:关闭MSYS2,重新启动MSYS2并更新

pacman -Syu

设置环境变量(重要)

D:\DevelopProgram\msys64\mingw64\bin
D:\DevelopProgram\msys64\usr\bin

安装软件

安装Qt动态发布链接库:

pacman -S mingw-w64-x86_64-qt-creator mingw-w64-x86_64-qt5

安装Qt静态链接库:

pacman -S mingw-w64-x86_64-qt5-static

清理安装包

pacman -Scc

变量配置

vim /etc/profile

export QT_MSYS2=true
export QT_MSYS2_ARCH=amd64
export QT_MSYS2_ARCH=amd64
export QT_MSYS2_STATIC=true

# 生效:
source /etc/profile

Qt离线包安装

安装

将g++所在路径加入环境变量PATH中(可选)

D:\DevelopProgram\Qt\Qt5.13.2\5.13.2\mingw73_64\bin 目录下包含了gcc、g++等编译链接工具
D:\DevelopProgram\Qt\Qt5.13.2\Tools\mingw730_64\bin 目录下包含了qmake.exe以及程序运行过程中需要的动态链接库(.dll)文件

设置变量(*非常重要,不匹配后期后导致编译错误)

err:
exec: "gcc": executable file not found in %PATH%

linux:
export QT_DIR=D:\\DevelopProgram\\Qt\\Qt5.13.2
export QT_VERSION=5.13.2
Windows:
QT_DIR=D:\\DevelopProgram\\Qt\\Qt5.13.2
QT_VERSION=5.13.2

Go mod配置

安装qt库方式:这里用第一种

  • 推荐在下载库的时候打开,这样会走代理,下载速度会非常快,后期处理略麻烦;
  • 关闭mod,下载速度慢,但后期处理简单。
  • 官网直接下载包,放置src下

开启mod,进行下载

# 打开mod
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io

备用代理地址:
GOPROXY=https://goproxy.io,direct
GOPROXY=https://mirrors.aliyun.com/goproxy/
GOPROXY=https://goproxy.cn

下载qt库

go get -v -tags=no_env github.com/therecipe/qt/cmd/...

库文件处理说明

  • 由于打开了mod,实现了代理下载,但库位置在:%GOPATH%/pkg/mod/
  • 会导致配置go mod vendor;以及引发其他的问题;
  • 运行qtsetup 会导致库文件不全;
  • IDE会导致识别问题;
  • 因此将库文件放置src下,前提一定要配置好GOPATH\GOROOT变量。

库文件处理(therecipe,gopherjs)

cp -r %GOPATH%/pkg/mod/github.com/therecipe %GOPATH%/src/github.com/
cp -r %GOPATH%/pkg/mod/github.com/gopherjs %GOPATH%/src/github.com/

在src中进入对应的包,去掉版本号,否则无法识别
同目录文件进行合并

qtsetup

生成binding需要编译一些Qt的source文件,所以要花上一段时间。

# 关闭mod,否则会让你运行go mod vendor
go env -w GO111MODULE=off

# 开始编译
%GOPATH%\bin\qtsetup.exe

为什么不直接使用go build

因为qt使用了moc技术(元对象编译器),对于一些Qt的扩展语法需要进行额外的处理,用C++写过Qt项目的读者应该知道不能直接用g++或者其他编译器去编译项目代码,而是通过qmake生成的Makefile进行构建,而在这个Makefile文件里就使用了moc程序来处理Q_OBJECT这样的扩展语法,处理完成后再交由C++编译器编译。
golang也是同样的流程,只不过不用自己配置qmake,而是用一条qtdeploy命令就能完成项目的编译了。

使用go编译1

当然使用go build也是可行的,如果你不需要qtdeploy生成的额外内容,使用如下命令即可:
cd your_project
qtmoc # 使用moc处理Qt扩展语法
qtrcc # 如果使用了qrc机制需要使用此命令
go build -o project_name
之后等待一段时间,会在目录下生成可执行程序。这个程序是动态链接的,所以需要运行程序的目标机器安装有相应的依赖。
因为目标环境可能不会安装有这些依赖,所以这时候我们就可以用qtdeploy解决问题。

使用go编译2

D:\\DevelopProgram\\Qt\\Qt5.13.2\\5.13.2\\mingw73_64\\bin\\qtenv2.bat
go build xx

go build 生成没有黑窗口

go build -ldflags='-H windowsgui'

qtdeploy编译 讲解

qtdeploy build [target] [path/to/your/project]
target是指定的目标平台,编译完成后的程序将可以在target指定的平台上运行。
如果也可以将target设为desktop,qtdeploy将会根据本地环境选择相对应的target。以下是部分可用的target选项:

desktop
windows
linux
android
android-emulator
ios
ios-simulator
sailfish
sailfish-emulator
rpi1
rpi2
rpi3

qtdeploy会自动调用qtrcc和qtmoc来进行预编译,然后再使用go build来编译

qtdeploy编译,生成目标exe文件

qtdeploy build desktop projectDir
发布了94 篇原创文章 · 获赞 52 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/weixin_43968923/article/details/105001824