xmake 新增对 Qt 编译环境支持,用本身最喜好的编辑器去开发 Qt 程序

最近给xmake新增了对 Qt SDK 环境的支持,如今咱们彻底能够脱离 Qt Creator 进行 Qt 应用程序的开发,甚至配合 vscode/idea/sublime/vim 等编辑器+xmake 插件(xmake-vscode, xmake-idea, xmake-sublime ...), 用户彻底能够切换到本身最经常使用的编辑器环境中去开发和构建 Qt 程序,例如这样:c++

经过模板建立空工程

xmake 内置了一些工程模板能够用来快速建立一个基于 Qt 的空工程,例如:git

$ 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 应用程序。github

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

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 环境目录:bash

$ xmake f --qt=~/Qt/Qt5.9.1
复制代码

静态库程序

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

若是你们想要支持其余构建环境,也只须要方便的自定义一个本身的扩展规则,应用到对应的 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")就好了。ide

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

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

  • 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

项目源码:github.com/tboox/xmake,欢迎大伙 star

原文出处:tboox.org/cn/2018/05/…

相关文章
相关标签/搜索