创建一个空工程: ```sh $ 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环境目录: ```sh $ xmake f --qt=~/Qt/Qt5.9.1 ``` 如果想要使用 windows 下 MingW 的 Qt 环境,可以切到mingw的平台配置,并且指定下mingw编译环境的sdk路径即可,例如: ```sh $ xmake f -p mingw --sdk=C:\Qt\Qt5.10.1\Tools\mingw530_32 ``` 上述指定的 MingW SDK 用的是Qt下Tools目录自带的环境,当然如果有其他第三方 MingW 编译环境,也可以手动指定, 具体可以参考:[MingW 编译配置](/zh/guide/basic-commands/build-configuration#mingw)。 更多详情可以参考:[#160](https://github.com/xmake-io/xmake/issues/160) 另外,当前xmake也支持Qt/Wasm,详情见:[Wasm 配置](/zh/guide/basic-commands/build-configuration#wasm-webassembly) ```sh $ xmake f -p wasm ``` ## 静态库程序 {#static-library} ## 动态库程序 {#shared-library} ## 控制台程序 {#console} ## Quick 应用程序 {#quickapp} ::: tip 注意 如果使用的自己编译的static版本QT SDK,那么需要切换到`add_rules("qt.quickapp_static")`静态规则才行,因为链接的库是不同的,需要做静态链接。 ::: 接下来,我们尝试编译下,通常,如果是使用Qt的安装包默认安装,也没有修改安装路径,那么大部分情况下都是可以自动检测到QT SDK的根路径,例如: ```sh $ 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! ``` 然后我们继续运行下它: ```sh $ xmake run ``` 效果如下: ![](/assets/img/guide/qt_quickapp.png) ## Quick Plugin 程序 {#quick-plugin} ## Widgets 应用程序 {#widgetapp} ::: tip 注意 如果使用的自己编译的static版本QT SDK,那么需要切换到`add_rules("qt.widgetapp_static")`静态规则才行,因为链接的库是不同的,需要做静态链接。 ::: 运行效果如下: ![](/assets/img/guide/qt_widgetapp.png) ## Android 应用程序 {#android-app} 2.2.6 之后版本,可以直接切到android平台编译Quick/Widgets应用程序,生成apk包,并且可通过`xmake install`命令安装到设备。 ```sh $ 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 ``` 然后安装到设备: ```sh $ xmake install installing appdemo ... installing build/android/release/appdemo.apk .. Success install ok!👌 ``` ## 目前支持的 Qt SDK {#supported-qtsdks} ### 来自 Qt 官方提供的 SDK 安装包 在 macos/windows 上通常能自动探测到,但是也可以手动指定 Qt SDK 路径。 ```sh $ xmake f --qt=[qt sdk path] ``` ### 来自 Ubuntu Apt 安装包 使用 apt 安装完 Qt SDK,xmake 也能够自动检测到。 ```sh $ sudo apt install -y qtcreator qtbase5-dev $ xmake ``` ### 来自 msys2/pacman 的 Qt Mingw 安装包 xmake 也支持从 pacman 安装的 Qt Mingw SDK ```sh $ pacman -S mingw-w64-x86_64-qt5 mingw-w64-x86_64-qt-creator $ xmake ``` ### 来自 aqtinstall 脚本的 Qt SDK 包 [aqtinstall](https://github.com/miurahr/aqtinstall) 安装的 Qt SDK 是完全基于官方 SDK 结构的,所以 xmake 也完全支持。 但是,通常需要自己指定 SDK 路径。 ```sh $ xmake f --qt=[Qt SDK] ``` ### 跨平台 Qt 交叉编译 对于跨平台 Qt 开发,xmake 支持为主机工具和目标平台使用单独的 SDK。这在为不同于开发机器的平台构建 Qt 应用程序时特别有用。 `--qt_host` 选项允许您指定与构建机器兼容的 Qt 工具的位置,而 `--qt` 指向目标平台的 SDK: ```sh $ xmake f --qt=[target Qt sdk] --qt_host=[host Qt sdk] ``` ::: tip 注意 - 确保主机和目标 Qt 版本匹配,否则可能会导致构建问题。 - 本机部署工具(如 `windeployqt` 和 `macdeployqt`)必须在各自的平台上运行,因此跨平台任务(如 `xmake install`)可能会失败。 ::: ### 来自 xmake-repo 仓库的 Qt 包 xmake 现在官方提供了 Qt5 和 Qt6 SDK 的各种模块包,可以自动集成使用,无需任何手动安装。 只需要配置集成包就行了,xmake 会自动处理 Qt 的安装集成,并且自动编译项目。 #### Qt5 示例 ```lua 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") ``` #### Qt6 示例 ```lua add_rules("mode.debug", "mode.release") add_requires("qt6widgets") target("test") add_rules("qt.widgetapp") add_packages("qt6widgets") 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") ``` 除了 `qt6widgets` 包,仓库还提供了 `qt6gui`, `qt6network` 等 Qt6 包,可以使用。 配置完,只需要执行: ```sh $ xmake ``` ::: tip 注意 Qt6 的包现已支持,可同时使用 Qt5 和 Qt6 包。 ::: ### 来自 vcpkg/conan 的 Qt 包 暂时还没时间支持,请尽量使用上面的方式集成 Qt SDK。