创建一个空工程:
$ xmake create -t qt.console test
$ xmake create -t qt.static test
$ xmake create -t qt.shared test
$ xmake create -t qt.quickapp test
$ xmake create -t qt.widgetapp test
更多工程模板见:xmake create --help
默认会自动探测Qt环境,当然也可以指定Qt SDK环境目录:
$ xmake f --qt=~/Qt/Qt5.9.1
如果想要使用 windows 下 MingW 的 Qt 环境,可以切到mingw的平台配置,并且指定下mingw编译环境的sdk路径即可,例如:
$ xmake f -p mingw --sdk=C:\Qt\Qt5.10.1\Tools\mingw530_32
上述指定的 MingW SDK 用的是Qt下Tools目录自带的环境,当然如果有其他第三方 MingW 编译环境,也可以手动指定, 具体可以参考:MingW 编译配置。
更多详情可以参考:#160
另外,当前xmake也支持Qt/Wasm,详情见:Wasm 配置
$ xmake f -p wasm
静态库程序
target("qt_static_library")
add_rules("qt.static")
add_files("src/*.cpp")
add_frameworks("QtNetwork", "QtGui")
动态库程序
target("qt_shared_library")
add_rules("qt.shared")
add_files("src/*.cpp")
add_frameworks("QtNetwork", "QtGui")
控制台程序
target("qt_console")
add_rules("qt.console")
add_files("src/*.cpp")
Quick 应用程序
target("qt_quickapp")
add_rules("qt.quickapp")
add_files("src/*.cpp")
add_files("src/qml.qrc")
注意
如果使用的自己编译的static版本QT SDK,那么需要切换到add_rules("qt.quickapp_static")
静态规则才行,因为链接的库是不同的,需要做静态链接。
接下来,我们尝试编译下,通常,如果是使用Qt的安装包默认安装,也没有修改安装路径,那么大部分情况下都是可以自动检测到QT SDK的根路径,例如:
$ xmake
checking for the architecture ... x86_64
checking for the Xcode directory ... /Applications/Xcode.app
checking for the SDK version of Xcode ... 10.15
checking for the Qt SDK directory ... /Users/ruki/Qt5.13.2/5.13.2/clang_64
checking for the Qt SDK version ... 5.13.2
[ 0%]: cache compiling.release src/main.cpp
[ 49%]: compiling.qt.qrc src/qml.qrc
[100%]: linking.release test
build ok!
然后我们继续运行下它:
$ xmake run
效果如下:
Quick Plugin 程序
完整例子见:quickplugin example
add_rules("mode.debug", "mode.release")
target("demo")
add_rules("qt.qmlplugin")
add_headerfiles("src/*.h")
add_files("src/*.cpp")
set_values("qt.qmlplugin.import_name", "My.Plugin")
Widgets 应用程序
target("qt_widgetapp")
add_rules("qt.widgetapp")
add_files("src/*.cpp")
add_files("src/mainwindow.ui")
add_files("src/mainwindow.h") -- 添加带有 Q_OBJECT 的meta头文件
注意
如果使用的自己编译的static版本QT SDK,那么需要切换到add_rules("qt.widgetapp_static")
静态规则才行,因为链接的库是不同的,需要做静态链接。
运行效果如下:
Android 应用程序
2.2.6 之后版本,可以直接切到android平台编译Quick/Widgets应用程序,生成apk包,并且可通过xmake install
命令安装到设备。
$ xmake create -t quickapp_qt -l c++ appdemo
$ cd appdemo
$ xmake f -p android --ndk=~/Downloads/android-ndk-r19c/ --android_sdk=~/Library/Android/sdk/ -c
$ xmake
[ 0%]: compiling.qt.qrc src/qml.qrc
[ 50%]: cache compiling.release src/main.cpp
[100%]: linking.release libappdemo.so
[100%]: generating.qt.app appdemo.apk
然后安装到设备:
$ xmake install
installing appdemo ...
installing build/android/release/appdemo.apk ..
Success
install ok!👌
目前支持的 Qt SDK
来自 Qt 官方提供的 SDK 安装包
在 macos/windows 上通常能自动探测到,但是也可以手动指定 Qt SDK 路径。
$ xmake f --qt=[qt sdk path]
来自 Ubuntu Apt 安装包
使用 apt 安装完 Qt SDK,xmake 也能够自动检测到。
$ sudo apt install -y qtcreator qtbase5-dev
$ xmake
来自 msys2/pacman 的 Qt Mingw 安装包
xmake 也支持从 pacman 安装的 Qt Mingw SDK
$ pacman -S mingw-w64-x86_64-qt5 mingw-w64-x86_64-qt-creator
$ xmake
来自 aqtinstall 脚本的 Qt SDK 包
aqtinstall 安装的 Qt SDK 是完全基于官方 SDK 结构的,所以 xmake 也完全支持。
但是,通常需要自己指定 SDK 路径。
$ xmake f --qt=[Qt SDK]
跨平台 Qt 交叉编译
对于跨平台 Qt 开发,xmake 支持为主机工具和目标平台使用单独的 SDK。这在为不同于开发机器的平台构建 Qt 应用程序时特别有用。
--qt_host
选项允许您指定与构建机器兼容的 Qt 工具的位置,而 --qt
指向目标平台的 SDK:
$ xmake f --qt=[target Qt sdk] --qt_host=[host Qt sdk]
注意
- 确保主机和目标 Qt 版本匹配,否则可能会导致构建问题。
- 本机部署工具(如
windeployqt
和macdeployqt
)必须在各自的平台上运行,因此跨平台任务(如xmake install
)可能会失败。
来自 xmake-repo 仓库的 Qt 包
xmake 现在官方提供了 Qt5 SDK 的各种模块包,可以自动集成使用,无需任何手动安装。
只需要配置集成包就行了,xmake 会自动处理 Qt 的安装集成,并且自动编译项目。
add_rules("mode.debug", "mode.release")
add_requires("qt5widgets")
target("test")
add_rules("qt.widgetapp")
add_packages("qt5widgets")
add_headerfiles("src/*.h")
add_files("src/*.cpp")
add_files("src/mainwindow.ui")
-- add files with Q_OBJECT meta (only for qt.moc)
add_files("src/mainwindow.h")
除了 qt5widgets
包,仓库还提供了 qt5gui
, qt5network
等包,可以使用。
配置完,只需要执行:
$ xmake
注意
Qt6 的包还在开发中,暂时仅仅只支持 Qt5
来自 vcpkg/conan 的 Qt 包
暂时还没时间支持,请尽量使用上面的方式集成 Qt SDK。