Qt多工程 自动切换编译运行,互不干扰

版权声明:如需转载,请告知博主并声明出处 https://blog.csdn.net/CLinuxF/article/details/88866090

前言

最近来了个项目,这个工程要跑在PC端还要跑在Android端,估计后面还会跑到Mac端,开始想单独做两个工程,一个PC,一个Android,用哪个的时候单独编译运行哪个,但是感觉很冗余,也很麻烦,因为除了两个平台的界面不同之外,其余后台业务逻辑数据请求几乎一模一样,单独列出来编译固然很方便,但是想到每次都要打开两个不同的工程,可能同一份后台逻辑业务代码copy两份时,就很头大。

问题

所以,就想到了如下问题,将两个工程融合到一个工程里面去,如图:
在这里插入图片描述
根据切换不同的构建套件来自动编译不同的工程,pc会自动编译pc端的,安卓会自动编译安卓的,而不是单独打开两个工程,再单独编译这么麻烦,而且后台逻辑业务是共用一套的,贼棒!!!

解决方案

有了问题,自然就有好的解决方案,我想到的是用子工程方法subdirs,如图:
在这里插入图片描述
这样加入即可,完美实现,在图中涉及到一个小知识点,做下单独说明:


额外知识点(Qt识别各个平台)

Qt的垮平台不单单指它的源码,在源码项目工程的配置上也可以区分的。

对于需要在windows,macx以及linux下发布的程序来说,每个平台都有细微的差别;也许在windows下就需要引用某个库,但是在mac和linux下就不需要。

在不同平台配置各自的pro工程文件自然就是不必要的,QMake本身就提供了在pro下可判断平台的变量参数,如下:

macx {
# mac only
}
ios{
# ios only
}
android{
# android only
}
unix:!macx{
# linux only
}
win32 {
# windows only
}

linux(也可以作为android平台)并没有单独的参数判断,但是可以通过是否是unix并且不是mac os x来判断是在linux系统底下。

若根据某些宏是否存在来执行不同的配置则可以:

添加宏定义:

扫描二维码关注公众号,回复: 6053976 查看本文章

DEFINES += TEST

判断宏定义是否存在

contains(DEFINES, TEST) {
    message('-->>(DEFINES, TEST)')
} else {
    message('-->>not contains (DEFINES, TEST)')
}

这种方式就不能智能化了,只能自己手动更改宏,不好不好!!!太弱智了

最后总结一下

这些虽然是很细节的常识,但是确是Qt跨平台开发必需的知识。

猜你喜欢

转载自blog.csdn.net/CLinuxF/article/details/88866090