merlinzjl

导航

QT 环境安装和跨平台编译那些事

 QT源码和SDK下载

http://download.qt.io

 

QT5.13安装

windows下通常使用VS来开发,而linux下则使用OtCreator来开发。

 

linux,以Ubuntu为例

安装Qt前需要先安装 g++ make

sudo apt-get install libgl1-mesa-dev

安装环境准备好后直接安装 ./qt-opensource-linux-x64-5.13.0.run 即可。

注意:一般安装在/usr下,里面很多文件夹,根据文件的类型,分门别类,不是一个软件一个文件夹。以前老版本的Linux习惯放在/usr/local目录下。

部分软件放在/opt下,则是一个软件统一在一个文件夹下。/opt目录专门是用来给第三方软件放置文件的,比如一些压缩包解压的软件都放在这里。

比如“网易云音乐”就安装在/usr/lib/netease-cloud-music

比如Chrome就放在/opt/google/chrome

 

Windows下调试工具的安装设置(使用微软的编译器)

安装完VisualStudio2017后,接着安装win10 SDK,安装完成后,在C:\Program Files (x86)\Windows Kits\10\Debuggers\x64(x86)下有一个cdb.exe用于调试。

Windows下,为QTCreator配置时注意使用的QT支持的编译器和VS支持的编译器必须一致。这里我们使用VS2017和QT5.13。

安装完后,打开Kits界面,如下所示进行查看。编译器有可能没有配置,需要手动选择一下。

 

 

 

QTCreator项目配置

1 配置库和头文件

 

然后导入头文件和lib文件所在路径,将dll拷贝到可执行目录下。

 

2、VS+QT项目配置

 

2.1、 首先安装QT的插件,根据VS的版本安装,这里使用qt-vsaddin-msvc2017-2.3.2

 

 

2.2、打开VS后,在菜单栏中的QT VS Tools->QT Options,配置你的QT版本

 

 

 

一 QT程序编译经历的步骤

 

1 qmake编译pro生成makefile

2 jom或者make编译makefile

 生产界面源码 uic.exe widget.ui –o ui_widget.h

 生产信号槽代码 moc.exe widget.h moc_widget.cpp

 

二 手动创建pro

windows下环境设置如下

 

linux下设置如下

 

先设置qmake的路径,然后使用qmake由testqmake.pro文件构建得到makefile文件。

然后使用make编译得到可执行文件。

 

三、将QtCreator创建的工程转换为VS

直接使用命令的行

 

使用命令行产生的代码在VS打开时,可能会出现“找不到 Windows SDK 版本8.1.请安装所需的版本的 Windows SDK 或者在项目属性页的问题解决方案”这种错误。处理方法如下所示。

 

 

或者使用插件也可以将QTCreator工程转换为VS工程。

 

 

 

四、pro文件下添加一个内部库

无论是通过UI,还是直接在pro文件中更改,都需要在添加之后,重新执行下qmake。

 

在帮助手册中找到你要使用的QT内部类,帮助手册会告诉你这个类该使用什么模块。

 

 

 

五、头文件引用。

对于工程来说,当前路径表示的是构建路径,即和源码同一级的文件夹下,如图是build-testqmake-Desktop_Qt_5_13_0_MSVC2017_64bit-Debug文件夹下。

 

$$PWD是获取当前源码路径,即在testqmake文件夹下,所以以下两个路径是相等的。

 

 

 

六、pro文件下 库引用和库路径指定。

语法: LIBS += -L”../../lib” –lopencv_world320 类似于链接库

虽然Windows和linux下库的名字稍有区别

linux下 libopencv_world320.so

windows下 opencv_world320.lib

但是QT会自动帮我们对应不同的平台。

 

pro文件下指定运行目录

DESTDIR  +=  ../../bin

 

pro文件下指定运行程序名字

TARGET = testq

 

七、QT创建一个动态库

pro文件下指定TEMPLATE = lib,如果pro文件下不指定,则默认生成应用程序。

linux下动态库是xxx.so 静态库是xxx.a

windows下动态库是xxx.dll 静态库是xxx.lib,而且动态库还包含一个标示地址的lib文件,而且,windows下还需要指定导出函数。

 

八、debug和release版本编译设置

CONFIG += debug_and_release(默认情况下是debug和release都有的)

除此之外,CONFIG还提供了CONFIG()函数。如下所示,如果是debug版本则输出的程序称为debug_binary,否在是release_binary。

CONFIG(debug, debug|release){//注意大括号必须紧跟着

TARGET = debug_binary

}else{

TARGET = release_binary

}

 

九、跨平台编译项目

针对不同平台使用不同配置

 

win32:INCLUDEPATH += “C:/mylibs/extra headers”

win32{

message(win32)

}

不是linux的平台

!linux{

message(win32)

}

 

如果是win32或linux

win32|linux{

message(win32)

}

 

QT内置定义了一些值 win32 linux macx unix

变量 QMAKESPEC 存储了当前的编译环境 message($$QMAKESPEC)可以打印出当前的编译环境。

我们可以查看

QT\5.13.0\msvc2017\mkspecs文件下的平台。

 

 最后附上一个pro文件

#指定源码
SOURCES += xsocket.cpp
#指定头文件
HEADERS += xsocket.h \
    xglobal.h
#指定生成的dll的名字
TARGET = libdll
#指定生成动态库
TEMPLATE = lib
#如果要生成静态库则需要再加一个
#CONFIG += staticlib

#添加LIBDLL_LIB宏
DEFINES +=LIBDLL_LIB

#指定dll的输出路径,只针对windows
DLLDESTDIR = ../../bin

#指定输出路径,编译生成的所有文件都会往这个路径输入
DESTDIR = ../../lib

posted on 2019-08-19 00:52  merlinzjl  阅读(5643)  评论(0编辑  收藏  举报