开发者社区> ruki> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

xmake新增对Qt编译环境支持

简介: 在最新的xmake v2.2.1版本中,新增了对Qt SDK环境的支持,我们完全可以脱离Qt Creater进行Qt应用程序的开发,甚至配合vscode/idea等编辑器+xmake插件(xmake-vscode, xmak...
+关注继续查看

在最新的xmake v2.2.1版本中,新增了对Qt SDK环境的支持,我们完全可以脱离Qt Creater进行Qt应用程序的开发,甚至配合vscode/idea等编辑器+xmake插件(xmake-vscode, xmake-idea …),
用户完全可以切换到自己最常用的编辑器环境中去开发和构建Qt程序,例如这样:

vscode-qt.jpeg

通过模板创建空工程

xmake内置了一些工程模板可以用来快速创建一个基于Qt的空工程,例如:

$ xmake create -l c++ -t console_qt test
$ xmake create -l c++ -t static_qt test
$ xmake create -l c++ -t shared_qt test
$ xmake create -l c++ -t quickapp_qt test

目前主要提供上述四种工程模板,对应:控制台程序、静态库、动态库、ui应用程序。

以quickapp工程为例,最后生成的空工程xmake.lua内容大概长这样:

target("qt_demo")

    -- add rules
    add_rules("qt.application")

    -- add headers
    add_headers("src/*.h")

    -- add files
    add_files("src/*.cpp") 
    add_files("src/qml.qrc")

    -- add frameworks
    add_frameworks("QtQuick")

Qt SDK环境配置

默认情况下xmake会自动探测Qt环境,当然如果找不到Qt SDK环境,用户也可以手动指定Qt SDK环境目录:

$ xmake f --qt=~/Qt/Qt5.9.1
静态库程序

xmake通过内置的构建规则qt.static,将其应用到对应的target,即可让相关target支持Qt静态库的构建,非常的方便简洁,关于构建规则的说明,可参考相关文档:内建规则

如果大家想要支持其他构建环境,也只需要方便的自定义一个自己的扩展规则,应用到对应的target即可实现,言归正传,我们看下Qt静态库的xmake.lua描述:

target("test")
    add_rules("qt.static")
    add_files("src/*.cpp")
    add_frameworks("QtNetwork", "QtGui")

非常简单,一般只需要这几行就ok了,如果需要用到Qt的一些框架库,可以通过add_frameworks来添加, 接着就是正常的编译过程:

$ xmake
动态库程序

动态库程序跟上节介绍的静态库描述规则类似,唯一的区别就是吧构建规则改成add_rules("qt.shared")就行了。

target("test")
    add_rules("qt.shared")
    add_files("src/*.cpp")
    add_frameworks("QtNetwork", "QtGui")

add_rules("qt.shared")和之前的set_kind("shared")有什么区别呢,区别就是:

  • set_kind("shared"): 是xmake最为基础的动态库构建模式,非常原始,不附加任何框架层的依赖库和配置
  • add_rules("qt.shared"):仅用于Qt动态库的构建,属于内置的扩展规则,会附加Qt SDK的构建环境
控制台程序

控制台也是类似,直接替换构建规则就可以了:qt.console

target("test")
    add_rules("qt.console")
    add_files("src/*.cpp")
Quick应用程序

从Qt目前最新的SDK,主要提供了两种ui app的构建框架,Quick App 和 Widgets App,xmake也都进行了支持,并且统一规范成:qt.application Qt应用程序规则来简化设置。

target("qt_quickapp")
    add_rules("qt.application")
    add_files("src/*.cpp") 
    add_files("src/qml.qrc")
    add_frameworks("QtQuick")

看上述描述,仅仅只需要把对应的qml.qrc作为源文件添加进去,然后附加需要的QtQuick依赖库就行了。

注:虽然xmake的add_links也是用来添加依赖库进行链接的,但是这里建议对于Qt SDK提供的库还是用add_frameworks来添加,因为所有Qt的构建规则都对add_frameworks进行了扩展,
对Qt自带的框架库进行了更好的支持,也能根据构建模式自动切换debug/release版本的Qt库。

Widgets应用程序

Widgets App的描述规则还是用的qt.application,只需要把.ui文件添加进去就行了,唯一需要注意的是,带Q_OBJECTmeta的头文件,例如:mainwindow.h这种,
因为有个moc预处理过程,所以也需要把它添加到源文件中,这样Qt的构建规则就会检测到,将其自动进行moc预处理。

target("qt_widgetapp")
    add_rules("qt.application")
    add_files("src/*.cpp") 
    add_files("src/mainwindow.ui")
    add_files("src/mainwindow.h")  -- 添加带有 Q_OBJECT 的meta头文件
    add_frameworks("QtWidgets")

关于Qt SDK环境支持的更多详情可以参考:#160

原文出处:http://tboox.org/cn/2018/05/30/support-qt/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
关于 Qt使用MSVC版本编译出现“QMAKE_MSC_VER” 的解决方法
关于 Qt使用MSVC版本编译出现“QMAKE_MSC_VER” 的解决方法
73 0
QT5.14.2编译部署QTAV播放器环境
QT5.14.2编译部署QTAV播放器环境
54 0
OpenJDK8 u292刚刚发布,我司已经编译成功AMD64/MIPS64
OpenJDK8 u292刚刚发布,我司已经编译成功AMD64/MIPS64
57 0
从openjdk.java.net获取OpenJDK8源码并编译(amd64/aarch64/arm64)
从openjdk.java.net获取OpenJDK8源码并编译(amd64/aarch64/arm64)
54 0
编译libxcb时报错:No package 'xcb-proto' found
编译libxcb时报错:No package 'xcb-proto' found
126 0
Apache Hadoop 2.7如何支持读写OSS
背景 2017.12.13日Apache Hadoop 3.0.0正式版本发布,默认支持阿里云OSS对象存储系统,作为Hadoop兼容的文件系统,后续版本号大于等于Hadoop 2.9.x系列也支持OSS。
2892 0
全志A33 lichee 搭建Qt App开发环境编写helloworld
开发平台 芯灵思SinlinxA33开发板 嵌入式linux 开发板 Step 1 在虚拟机(CentOS7)上安装Qt Creator 将qt-creator-opensource-linux-x86_64-3.5.1.run 拷贝到虚拟机中,双击安装,全部点下一步即可。
2337 0
《C++语言入门经典》一1.2 Visual Studio 2010 集成编译环境
本节书摘来自华章出版社《C++语言入门经典》一书中的第1章,第1.2节,作者 郭鑫 顾彦玲,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1606 0
+关注
ruki
专注于c跨平台开发解决方案
24
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载