加载中…
个人资料
莫一剑
莫一剑
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,077,359
  • 关注人气:104
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

跨平台开发之Qt开发

(2018-07-13 09:17:59)
分类: QT
任何一种开发工具编译都至少包含两个步骤:

1、Build

2、run

看起来是不是很简单,但是实际上底层可能比我们想象的要复杂的多。这主要是因为开发工具在底层帮我们完成了一些工作,比如make是有依赖文件的,Unix系列平台主要是makefile这种脚本文件,Window上vs有它自带的vcxproj, sln文件。window上其他开发工具也有的用makefile。因为makefile是脚本语言,平台通用的。

如果进行细分的话,应该包括以下步骤:

1、 生成编译依赖文件,或者手写

2、Build

3、linker

4、install

反正就是make一定有一个依赖文件,他不会直接根据源文件来编译的,因为他不知道用什么编译器,gcc还是msvc,还是其他交叉工具链。另外他也不知道要编译哪些文件。他还不知道是编译成动态库静态库还是执行文件,当然他也不知道他依赖的外部库和头文件在哪里找。

今天主要讲一下Qt的跨平台开发是怎么解决以上问题的。

先回答一下Qt是怎么解决以上几个问题的。pro文件也不例外需要解决上面几个问题,那么是怎么解决的呢?

1) 指定编译器,工具链。

这个可以到Tools->Options->Build&Run,然后选择qmake,编译器,调试工具等!

https://img-blog.csdn.net/20160122131151662?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

需要自己安装编译器,会自动出现在这里,如果没有可以自己添加。

关于Android编译器在另外一篇里已经谈到。所以C++ 程序员在window上是可以直接用Qt开发Android的,同样像Qt一样的语法。

2)编译哪些文件,下面有些东西可以很好管理代码这就是pro文件的功能了,用pro文件可以很好的管理代码。

如果只习惯使用qt自动生成的pro,容易缺少代码管理的习惯。

如果有子工程:可以

SUBDIR += 子工程目录,里面一定也要用pro文件

平台控制:

windows平台可以写成:

win32:!wince{ #任意}

这样就可以与其他平台区分了。

wince:可能在qmake里增加 CONFIG +=wince然后,

wince{}

Linux:unix{}

Android:android{}

当然,如果你想增加自己的控制,也可以在CONFIG +=来增加,比如CONFIG +=msc,那么就可以

msc{}

来控制。

增加宏定义:DEFINES +=ANDROID

这个宏定义是用于作为在代码里进行编译开关的。跟在代码里写的#define一样。但是不觉得写到pro里对代码的管理能力更强吗。

其他的还有equal,contains等条件语句。具体可以到源码里找。

外部库文件:

LIBS +=-L路径

在代码里有时候用 #include "dir1/dir2/dir3/lib.h"等可能比较长,我们可以这样做:

INCLUDEPATH += dir1/dir2/dir3/

然后在代码里可以写成:#include 或#include “lib.h"

下面两个就是你自己的代码了。

源文件:

SOURCES +=

头文件:

HEADERS += 

Install 主要是编译和链接完成后,打包的过程。

可以把依赖的库文件,配置文件通过Install打包到编译目录去。具体过程,

比如pthread的dll文件:

thread.path=$$PWD_PATH/bin

//这个是目标目录

thread.files +=后面写文件所在的目录/*.dll,可以多个。

参考后面的例子当然实现Install需要在Projects里增加一个make

步骤,如下:

https://img-blog.csdn.net/20160122131304162?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有