توسعه با Qt.
نسخهٔ پایدار فعلی Qt را از سورس با SDKهای جدا برای میزبان و هدف بسازید. دستورهای وابسته به نسخه در این صفحه از فایل مشخصات انتشار تولید میشوند که از فهرستهای رسمی Qt و مستندات فعلی پلتفرم بهروزرسانی میشود.
نسخهٔ پایدار فعلی را دنبال کنید، نه نسخهای بهصورت ثابت بنویسید شده در راهنما.
شمارهٔ انتشار، نام آرشیو کد منبع، سری مستندات، نسخهٔ Qt Creator، مقادیر سازگاری Android و هدف مربوط به Emscripten بهصورت مرکزی شناسایی میشوند. وقتی Qt نسخهٔ پایدار جدیدی منتشر کند، guide مسیرهای تولیدشده و compatibility snapshot را بهروز میکند و نیازی به ویرایش دستی همهٔ صفحهها نیست.
اگر نیازمندی بالادستی تغییر کرد، انتشار سامانهٔ شناسایی نسخه را بهروز کنید نه اینکه شماره نسخهٔ جدید را داخل متن کپی کنید. نکات پلتفرمی که نمیتوان امن استنتاج کرد همچنان به matrix رسمی و فعلی Qt لینک میشوند.
درختهای کد منبع، ساخت و install را جدا نگه دارید.
داخل درخت کد منبع ساخت نکنید و نصبهای میزبان و هدف را با هم مخلوط نکنید. یک پیشوند خنثی host روی macOS، Linux یا Windows کار میکند و هدفهای کامپایل متقابل کنار آن قرار میگیرند.
~/Qt/
├── Src/
│ └── qt-everywhere-src-6.12.0/
├── Build/
│ └── 6.12.0/
│ ├── host/
│ ├── linux-x86_64/
│ ├── linux-arm64/
│ ├── linux-armv7/
│ ├── rpi-aarch64/
│ ├── android-arm64-v8a/
│ ├── android-armeabi-v7a/
│ ├── android-x86_64/
│ ├── android-x86/
│ ├── ios/
│ ├── ios-device/
│ ├── ios-simulator/
│ ├── wasm/
│ └── wasm-threads-simd/
├── 6.12.0/
│ ├── host/
│ ├── linux-x86_64/
│ ├── linux-arm64/
│ ├── linux-armv7/
│ ├── rpi-aarch64/
│ ├── android-arm64-v8a/
│ ├── android-armeabi-v7a/
│ ├── android-x86_64/
│ ├── android-x86/
│ ├── ios/
│ ├── ios-device/
│ ├── ios-simulator/
│ ├── wasm/
│ └── wasm-threads-simd/
└── Toolchains/
└── emsdk/
آرشیو کد منبع نسخهٔ پایدار فعلی را دریافت کنید.
URL آرشیو زیر از فهرست نسخهٔ پایدار فعلی Qt تولید میشود.
mkdir -p "$HOME/Qt/Src"
cd "$HOME/Qt/Src"
curl -fLO "https://download.qt.io/official_releases/qt/6.12/6.12.0/single/qt-everywhere-src-6.12.0.tar.xz"
tar -xf "qt-everywhere-src-6.12.0.tar.xz"
ماتریس هدف فعلی.
| هدف | Compatibility snapshot فعلی | قاعدهٔ ساخت |
|---|---|---|
| macOS | Xcode 16+ | Toolchain بومی Apple؛ ساخت یونیورسال اختیاری است. |
| Linux | Ubuntu 24.04 / Debian 11.6–12 · x86_64, arm64 | x86_64 و arm64 در ماتریس فعلیِ پشتیبانی دسکتاپ قرار دارند؛ معماریهای بیشتر برای Linux نهفته به زنجیرهابزار و sysroot سازگار نیاز دارند. |
| Linux نهفته | Raspberry Pi، Jetson، Orange Pi، BeagleBone و بردهای RISC-V | از Qt میزبان، کامپایلر متقابل منطبق با برد، sysroot و فایل زنجیرهابزار CMake استفاده کنید. |
| Windows | MSVC 2022 · Mingw-w64 15.1 | پیشوندها و درختهای ساخت MSVC و MinGW را جدا نگه دارید. |
| Android | Android 9–16 · API 28–36 · arm64-v8a, armeabi-v7a, x86_64, x86 | ابتدا Qt میزبان را بسازید؛ سپس هر ABI اندروید را در درخت ساخت و مسیر نصب جداگانه نگه دارید. |
| iOS | Xcode 16+ · iOS 18+ | روی macOS ساخت کنید؛ پشتیبانی دستگاه و شبیهساز را در iOS SDK هدف نگه دارید. |
| WebAssembly | Emscripten 5.0.5 | ابتدا میزبان Qt منطبق را بسازید؛ گونههای تکریسمانی و چندریسمانی را جدا نگه دارید. |
برای جزئیات دقیق architecture و distribution از matrix فعلی پلتفرمهای پشتیبانیشدهٔ Qt ↗. This guide intentionally avoids duplicating long-lived platform tables that upstream owns.
ابتدا Qt میزبان را بسازید.
ساختهای کد منبع برای Android، iOS و WebAssembly به ابزارهای سمت میزبان Qt از همان انتشار نیاز دارند. پیش از هر کامپایل متقابل هدف، میزبان SDK را ساخت و بررسی کنید.
میزبان macOS
sudo xcode-select --switch /Applications/Xcode.app
sudo xcodebuild -license accept
brew install cmake ninja python bison flex gperf node pkg-config
cmake --version
ninja --version
xcrun clang++ --version
mkdir -p "$HOME/Qt/Build/6.12.0/host"
cd "$HOME/Qt/Build/6.12.0/host"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/configure" \
-prefix "$HOME/Qt/6.12.0/host" \
-release \
-shared \
-make examples
cmake --build . --parallel
cmake --install .
میزبان Linux
sudo apt update
sudo apt install -y \
build-essential \
clang \
cmake \
ninja-build \
pkg-config \
python3 \
bison \
flex \
gperf \
nodejs
بستههای توسعهای X11/Wayland، OpenGL/Vulkan، چندرسانهای، دسترسپذیری و سایر وابستگیهای لازم برای ماژولهایی که میسازید را اضافه کنید. خلاصهٔ پیکربندی خود Qt مرجع است؛ قابلیت غیرفعالی را که واقعاً نیاز دارید نادیده نگیرید.
میزبان Windows
برای MSVC زنجیرهابزار پشتیبانیشدهٔ فعلی از Developer PowerShell استفاده کنید و CMake و Ninja را در همان محیط در دسترس داشته باشید.
mkdir C:\Qt\build\6.12.0\host
cd C:\Qt\build\6.12.0\host
C:\\Qt\\Src\\qt-everywhere-src-6.12.0\\configure.bat `
-prefix C:\\Qt\\6.12.0\\host `
-release `
-shared `
-make examples
cmake --build . --parallel
cmake --install .
SDK یونیورسال macOS بهصورت اختیاری.
وقتی یک نصب از Qt باید sliceهای Intel و Apple Silicon را همزمان داشته باشد، بهجای تغییر میزبان ساخت بومی یک universal پیشوند اختصاصی بسازید.
mkdir -p "$HOME/Qt/Build/6.12.0/macos-universal"
cd "$HOME/Qt/Build/6.12.0/macos-universal"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/configure" \
-prefix "$HOME/Qt/6.12.0/macos-universal" \
-release \
-shared \
-- \
-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
cmake --build . --parallel
cmake --install .
معماریهای Linux.
Qt's current supported desktop matrix covers x86_64 و arm64 on current Ubuntu and Debian releases. Other Linux architectures can still be built from source when you provide a matching cross compiler and sysroot, but they are not equivalent to the officially supported desktop configurations.
| معماری | روش ساخت | سطح پشتیبانی |
|---|---|---|
x86_64 | ساخت بومی دسکتاپ | معماری فعلیِ پشتیبانیشده برای دسکتاپ Linux |
arm64 / aarch64 | ساخت بومی دسکتاپ یا کامپایل متقابل | معماری پشتیبانیشدهٔ دسکتاپ Linux در نسخههای ذکرشدهٔ Ubuntu و Debian |
armv7 / armhf | Linux نهفته با کامپایل متقابل | به زنجیرهابزار، sysroot و بررسی روی دستگاهِ مخصوص همان هدف نیاز دارد |
riscv64 | Linux نهفته یا سفارشی با کامپایل متقابل | با زنجیرهابزار و sysroot مناسب قابل ساخت است، اما در ماتریس فعلیِ اصلیِ دسکتاپ قرار ندارد |
ساخت بومی x86_64
این روش را روی میزبان ۶۴ بیتی Intel/AMD در Linux استفاده کنید. مسیر نصب را مخصوص همین معماری نگه دارید تا با ساختهای ARM تداخل پیدا نکند.
mkdir -p "$HOME/Qt/Build/6.12.0/linux-x86_64"
cd "$HOME/Qt/Build/6.12.0/linux-x86_64"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/configure" \
-prefix "$HOME/Qt/6.12.0/linux-x86_64" \
-release \
-shared \
-make examples
cmake --build . --parallel
cmake --install .
ساخت بومی arm64 / aarch64
روی یک دستگاه Linux با معماری ARM64، Qt را درست مانند x86_64 بهصورت بومی بسازید. Qt در حال حاضر ARM64 را برای Ubuntu 24.04 و Debian 11.6/12 در ماتریس پشتیبانی Linux قرار داده است.
mkdir -p "$HOME/Qt/Build/6.12.0/linux-arm64"
cd "$HOME/Qt/Build/6.12.0/linux-arm64"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/configure" \
-prefix "$HOME/Qt/6.12.0/linux-arm64" \
-release \
-shared \
-make examples
cmake --build . --parallel
cmake --install .
کامپایل متقابل از میزبان x86_64 برای هدف arm64
برای کامپایل متقابل Qt در Linux به Qt میزبان از همان نسخه، یک sysroot برای دستگاه هدف و فایل زنجیرهابزار CMake نیاز دارید. مثال زیر از زنجیرهابزار متداول aarch64-linux-gnu استفاده میکند؛ sysroot را با نمونهٔ مربوط به توزیع یا دستگاه واقعی خودتان جایگزین کنید.
در Ubuntu یا Debian، کامپایلرهای متقابل مربوط به معماریهایی را که میخواهید بسازید نصب کنید: gcc-aarch64-linux-gnu, g++-aarch64-linux-gnu, gcc-arm-linux-gnueabihf و g++-arm-linux-gnueabihf.
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_SYSROOT "/opt/sysroots/aarch64-linux-gnu")
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
mkdir -p "$HOME/Qt/Build/6.12.0/linux-arm64"
cd "$HOME/Qt/Build/6.12.0/linux-arm64"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/configure" \
-release \
-qt-host-path "$HOME/Qt/6.12.0/host" \
-extprefix "$HOME/Qt/6.12.0/linux-arm64" \
-prefix "/usr/local/qt6" \
-nomake tests \
-- \
-DCMAKE_TOOLCHAIN_FILE="$HOME/Qt/Toolchains/linux-aarch64-toolchain.cmake"
cmake --build . --parallel
cmake --install .
کامپایل متقابل از میزبان x86_64 برای ARMv7 با ممیز شناور سختافزاری
ARMv7 برای دستگاههای قدیمیتر Linux نهفته و بردهای ۳۲ بیتی ARM کاربرد دارد. این یک هدف نهفته با کامپایل متقابل است و جزو ماتریس اصلی پشتیبانی دسکتاپ Linux نیست. از sysroot و کامپایلری استفاده کنید که دقیقاً با تصویر سیستم دستگاه مطابقت داشته باشد.
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_SYSROOT "/opt/sysroots/arm-linux-gnueabihf")
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
set(CMAKE_C_FLAGS_INIT "-march=armv7-a -mfpu=neon -mfloat-abi=hard")
set(CMAKE_CXX_FLAGS_INIT "-march=armv7-a -mfpu=neon -mfloat-abi=hard")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
mkdir -p "$HOME/Qt/Build/6.12.0/linux-armv7"
cd "$HOME/Qt/Build/6.12.0/linux-armv7"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/configure" \
-release \
-qt-host-path "$HOME/Qt/6.12.0/host" \
-extprefix "$HOME/Qt/6.12.0/linux-armv7" \
-prefix "/usr/local/qt6" \
-nomake tests \
-- \
-DCMAKE_TOOLCHAIN_FILE="$HOME/Qt/Toolchains/linux-armv7-toolchain.cmake"
cmake --build . --parallel
cmake --install .
همین مدل کامپایل متقابل Qt 6 برای معماریهایی مانند riscv64 نیز قابل استفاده است، به شرط آنکه کامپایلر، sysroot و زیرساخت گرافیک/ورودیِ سالم وجود داشته باشد. تا زمانی که ماتریس رسمی پلتفرمهای پشتیبانیشدهٔ Qt صریحاً آن معماری را فهرست نکرده، آن را یک ساخت نهفته و مخصوص همان هدف در نظر بگیرید.
Raspberry Pi و سایر بردهای Linux.
Qt 6 برای Raspberry Pi و سایر بردهای Linux از یک مدل کامپایل متقابل یکسان استفاده میکند: Qt میزبان از همان نسخه، کامپایلر متقابل، sysroot دقیقاً منطبق با تصویر سیستم دستگاه و فایل زنجیرهابزار CMake. روش قدیمی Qt 5 که فقط به دستگاه mkspec متکی بود برای Qt 6 کافی نیست.
| خانوادهٔ برد | معماری معمول | توضیحات |
|---|---|---|
| Raspberry Pi 5 / Raspberry Pi 4 · سیستمعامل ۶۴ بیتی | aarch64 / arm64 | مسیر پیشنهادی برای Raspberry Pi OS فعلی و سامانههای نهفتهٔ جدید. |
| Raspberry Pi 4 / مدلهای قدیمیتر · سیستمعامل ۳۲ بیتی | armv7 / armhf | از زنجیرهابزار ARMv7 با ممیز شناور سختافزاری و sysroot منطبق ۳۲ بیتی استفاده کنید. |
| خانوادهٔ NVIDIA Jetson | aarch64 | از sysroot سازگار با JetPack/L4T استفاده کنید تا EGL، OpenGL ES و کتابخانههای سازنده با دستگاه منطبق باشند. |
| بردهای Orange Pi / Rockchip | aarch64 یا armv7 | معماری به SoC و تصویر Linux نصبشده بستگی دارد. |
| BeagleBone Black | armv7 / armhf | معمولاً با arm-linux-gnueabihf. |
| بردهای توسعهٔ RISC-V | riscv64 | به کامپایلر، sysroot و زیرساخت گرافیک/ورودی مخصوص همان هدف نیاز دارد. |
نمونهٔ ۶۴ بیتی Raspberry Pi 4 / 5
SDK یا sysroot را از همان تصویر سیستمعاملی تهیه کنید که واقعاً روی برد اجرا میشود. sysroot مربوط به نسخهای دیگر از Raspberry Pi OS یا توزیعی متفاوت ممکن است پیکربندی را با موفقیت رد کند اما بعداً بهدلیل ناسازگاری EGL، Mesa، libc یا سایر کتابخانههای هدف شکست بخورد.
sudo apt update
sudo apt install -y \
gcc-aarch64-linux-gnu \
g++-aarch64-linux-gnu \
cmake \
ninja-build \
pkg-config
export RPI_SYSROOT="$HOME/Qt/Sysroots/rpi-aarch64"
export QT_HOST="$HOME/Qt/6.12.0/host"
rpi-aarch64-toolchain.cmakeset(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_SYSROOT "$ENV{RPI_SYSROOT}")
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
set(CMAKE_FIND_ROOT_PATH "$ENV{RPI_SYSROOT}")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
export RPI_SYSROOT="$HOME/Qt/Sysroots/rpi-aarch64"
export QT_HOST="$HOME/Qt/6.12.0/host"
mkdir -p "$HOME/Qt/Build/6.12.0/rpi-aarch64"
cd "$HOME/Qt/Build/6.12.0/rpi-aarch64"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/qtbase/configure" \
-release \
-opengl es2 \
-qt-host-path "$QT_HOST" \
-extprefix "$HOME/Qt/6.12.0/rpi-aarch64" \
-prefix "/usr/local/qt6" \
-nomake examples \
-nomake tests \
-- \
-DCMAKE_TOOLCHAIN_FILE="$HOME/Qt/Toolchains/rpi-aarch64-toolchain.cmake"
cmake --build . --parallel
cmake --install .
برای Raspberry Pi، Jetson و بردهای مشابه، خلاصهٔ پیکربندی را بررسی کنید تا یکپارچگی پلتفرمی موردنیاز شما مانند EGLFS، Wayland، OpenGL ES یا یکی دیگر از backendهای QPA واقعاً فعال باشد. موفق بودن آزمون کامپایلر بهتنهایی نشان نمیدهد زیرساخت گرافیکی هدف قابل استفاده است.
استقرار و بررسی روی برد
rsync -a --delete \
"$HOME/Qt/6.12.0/rpi-aarch64/" \
user@raspberrypi:/usr/local/qt6/
ssh user@raspberrypi \
'/usr/local/qt6/bin/qtpaths --qt-version'
برای تصویر ۳۲ بیتی Raspberry Pi یا هدفی در ردهٔ BeagleBone، از زنجیرهابزار ARMv7 بخش معماریهای Linux استفاده کنید و مسیر نصب جداگانهٔ rpi-armv7 یا مسیر مخصوص همان دستگاه را نگه دارید.
Android.
The current manifest resolves Android 9–16, API 28–36, Build Tools 36.0.0, NDK r27c (27.2.12479018), JDK 21, Gradle 9.5.1 and AGP 9.2.1 from Qt's current documentation.
sdkmanager \
"platform-tools" \
"platforms;android-36" \
"build-tools;36.0.0" \
"ndk;27.2.12479018"
macOS · arm64-v8a
این مسیرِ تأییدشده برای ساخت Qt از کد منبع روی macOS است؛ در حالتی که Android Studio یا ابزارهای خط فرمان Android، SDK را در مسیر استاندارد نصب کرده باشند.
mkdir -p "$HOME/Qt/Build/6.12.0/android-arm64-v8a"
cd "$HOME/Qt/Build/6.12.0/android-arm64-v8a"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/configure" \
-prefix "$HOME/Qt/6.12.0/android-arm64-v8a" \
-qt-host-path "$HOME/Qt/6.12.0/host" \
-android-abis arm64-v8a \
-android-sdk "$HOME/Library/Android/sdk" \
-android-ndk "$HOME/Library/Android/sdk/ndk/27.2.12479018" \
-release
cmake --build . --parallel
cmake --install .
ABIهای پشتیبانیشدهٔ Android
| ABI | کاربرد معمول | مسیر پیشنهادی Qt |
|---|---|---|
arm64-v8a | گوشیها و تبلتهای اصلی ۶۴ بیتی ARM | android-arm64-v8a |
armeabi-v7a | دستگاههای قدیمیتر ۳۲ بیتی ARM | android-armeabi-v7a |
x86_64 | شبیهسازهای ۶۴ بیتی x86 برای Android و دستگاههای سازگار | android-x86_64 |
x86 | پوشش شبیهسازها و دستگاههای قدیمی ۳۲ بیتی x86 | android-x86 |
macOS · armeabi-v7a
mkdir -p "$HOME/Qt/Build/6.12.0/android-armeabi-v7a"
cd "$HOME/Qt/Build/6.12.0/android-armeabi-v7a"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/configure" \
-prefix "$HOME/Qt/6.12.0/android-armeabi-v7a" \
-qt-host-path "$HOME/Qt/6.12.0/host" \
-android-abis armeabi-v7a \
-android-sdk "$HOME/Library/Android/sdk" \
-android-ndk "$HOME/Library/Android/sdk/ndk/27.2.12479018" \
-release
cmake --build . --parallel
cmake --install .
macOS · x86_64
mkdir -p "$HOME/Qt/Build/6.12.0/android-x86_64"
cd "$HOME/Qt/Build/6.12.0/android-x86_64"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/configure" \
-prefix "$HOME/Qt/6.12.0/android-x86_64" \
-qt-host-path "$HOME/Qt/6.12.0/host" \
-android-abis x86_64 \
-android-sdk "$HOME/Library/Android/sdk" \
-android-ndk "$HOME/Library/Android/sdk/ndk/27.2.12479018" \
-release
cmake --build . --parallel
cmake --install .
ساخت اختیاری x86 قدیمی
mkdir -p "$HOME/Qt/Build/6.12.0/android-x86"
cd "$HOME/Qt/Build/6.12.0/android-x86"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/configure" \
-prefix "$HOME/Qt/6.12.0/android-x86" \
-qt-host-path "$HOME/Qt/6.12.0/host" \
-android-abis x86 \
-android-sdk "$HOME/Library/Android/sdk" \
-android-ndk "$HOME/Library/Android/sdk/ndk/27.2.12479018" \
-release
cmake --build . --parallel
cmake --install .
Qt may download Gradle 9.5.1 and the Android Gradle Plugin 9.2.1 during dependency resolution. A Gradle BUILD SUCCESSFUL message means that dependency-resolution stage completed successfully; Qt's top-level configure must still finish without a later CMake error before the build tree is considered ready.
اگر دریافت Gradle با پایان مهلت زمانی متوقف شد
وابستگیهای Gradle را یکبار صریحاً در حافظهٔ موقت Qt دریافت کنید و سپس دستور پیکربندی بالا را دوباره اجرا کنید. پس از آن، مرحلهٔ اصلی ساخت Qt برای این وابستگیها نیازی به دریافت دوباره از شبکه ندارد.
QT_SRC="$HOME/Qt/Src/qt-everywhere-src-6.12.0"
cmake -E env \
ANDROID_SDK_ROOT="$HOME/Library/Android/sdk" \
cmake \
-DACTION_RESOLVE_GRADLE=ON \
-DQT_ROOT_DIR="$QT_SRC/qtbase" \
-DGRADLE_PROJECT_DIR="$QT_SRC/qtbase/src/android/jar" \
-DGRADLE_BUILD_VARIANT=Release \
-DQT_ANDROID_SDK_BUILD_TOOLS_REVISION=36.0.0 \
-P "$QT_SRC/qtbase/cmake/QtSetupAndroid.cmake"
سایر پلتفرمهای میزبان
گزینههای پیکربندی یکساناند و فقط مسیر Android SDK تغییر میکند. مسیرهای رایج SDK عبارتاند از ~/Android/Sdk در Linux، ~/Library/Android/sdk در macOS و C:\Users\<USER>\AppData\Local\Android\Sdk در Windows. مسیر Qt میزبان و محل نصب Qt مخصوص Android را از هم جدا نگه دارید.
export ANDROID_SDK_ROOT="/path/to/Android/Sdk"
export ANDROID_NDK_ROOT="$ANDROID_SDK_ROOT/ndk/27.2.12479018"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/configure" \
-prefix "$HOME/Qt/6.12.0/android-arm64-v8a" \
-qt-host-path "$HOME/Qt/6.12.0/host" \
-android-abis arm64-v8a \
-android-sdk "$ANDROID_SDK_ROOT" \
-android-ndk "$ANDROID_NDK_ROOT" \
-release
بستههای چندمعماری Android
Qt را برای هر ABI جداگانه بسازید؛ سپس در مرحلهٔ ساخت برنامه، SDKهای نصبشدهٔ Qt را در یک APK، AAB یا AAR چندمعماری ترکیب کنید. چون این مسیرها از ساخت دستی Qt بهدست آمدهاند، مسیر هرکدام را صریحاً به CMake بدهید و به شناسایی خودکار پوشههای نصب تکیه نکنید.
"$HOME/Qt/6.12.0/android-arm64-v8a/bin/qt-cmake" \
-S /path/to/app \
-B /path/to/app-build \
-GNinja \
-DANDROID_SDK_ROOT="$HOME/Library/Android/sdk" \
-DANDROID_NDK_ROOT="$HOME/Library/Android/sdk/ndk/27.2.12479018" \
-DQT_ANDROID_ABIS="arm64-v8a;armeabi-v7a;x86_64" \
-DQT_PATH_ANDROID_ABI_arm64-v8a="$HOME/Qt/6.12.0/android-arm64-v8a" \
-DQT_PATH_ANDROID_ABI_armeabi-v7a="$HOME/Qt/6.12.0/android-armeabi-v7a" \
-DQT_PATH_ANDROID_ABI_x86_64="$HOME/Qt/6.12.0/android-x86_64"
cmake --build /path/to/app-build --target apk
# or:
cmake --build /path/to/app-build --target aab
فقط ABIهایی را بسازید که محصول واقعاً نیاز دارد. جدا نگه داشتن مسیر نصب هر ABI، ارتقا، بررسی صحت و بستهبندی چندمعماری را قابل پیشبینی و قابل بازتولید میکند.
دستگاه iOS و شبیهساز.
iOS builds run on macOS and use the Apple SDK supplied by the current Xcode toolchain. The current compatibility snapshot requires Xcode 16+ and iOS 18+. The device architecture is arm64است و معماری شبیهساز که از مستندات فعلی Qt شناسایی شده x86_64.
| هدف | SDK | معماری | مسیر نصب |
|---|---|---|---|
| دستگاه | iphoneos | arm64 | ios-device |
| شبیهساز | iphonesimulator | x86_64 | ios-simulator |
| SDK ترکیبی Qt | دستگاه + شبیهساز | مدیریتشده توسط Qt | ios |
پیشفرض: ساخت یک SDK از Qt برای iOS شامل کتابخانههای دستگاه و شبیهساز
ساخت پیشفرض Qt برای iOS از کد منبع، هم کتابخانههای دستگاه و هم شبیهساز را شامل میشود. زمانی از این روش استفاده کنید که یک نصب Qt باید هر دو مقصد اجرای Xcode را پوشش دهد.
mkdir -p "$HOME/Qt/Build/6.12.0/ios"
cd "$HOME/Qt/Build/6.12.0/ios"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/configure" \
-platform macx-ios-clang \
-qt-host-path "$HOME/Qt/6.12.0/host" \
-prefix "$HOME/Qt/6.12.0/ios" \
-release
cmake --build . --parallel
cmake --install .
SDK مخصوص دستگاه
از -sdk iphoneos استفاده کنید وقتی یک نصب مستقل Qt فقط برای دستگاه واقعی میخواهید.
mkdir -p "$HOME/Qt/Build/6.12.0/ios-device"
cd "$HOME/Qt/Build/6.12.0/ios-device"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/configure" \
-platform macx-ios-clang \
-sdk iphoneos \
-qt-host-path "$HOME/Qt/6.12.0/host" \
-prefix "$HOME/Qt/6.12.0/ios-device" \
-release
cmake --build . --parallel
cmake --install .
SDK مخصوص شبیهساز
از -sdk iphonesimulator برای یک نصب مستقل Qt مخصوص شبیهساز استفاده کنید.
mkdir -p "$HOME/Qt/Build/6.12.0/ios-simulator"
cd "$HOME/Qt/Build/6.12.0/ios-simulator"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/configure" \
-platform macx-ios-clang \
-sdk iphonesimulator \
-qt-host-path "$HOME/Qt/6.12.0/host" \
-prefix "$HOME/Qt/6.12.0/ios-simulator" \
-release
cmake --build . --parallel
cmake --install .
بنابراین روی Macهای Apple Silicon، مقصد اجرای شبیهساز از Rosetta استفاده میکند. در Xcode 26 یا جدیدتر، اگر مقصد شبیهساز مبتنی بر Rosetta دیده نمیشود، مؤلفهٔ یونیورسال پلتفرم iOS را نصب کنید:
xcodebuild -downloadPlatform iOS -architectureVariant universal
ساخت یک برنامه
از qt-cmake موجود در مسیر Qt مربوط به iOS انتخابشده استفاده کنید. پروژهٔ Xcode تولیدشده سپس میتواند روی دستگاه واقعی یا شبیهساز متناظر با همان SDK اجرا شود.
"$HOME/Qt/6.12.0/ios-simulator/bin/qt-cmake" \
-S /path/to/app \
-B /path/to/app-build-ios-simulator \
-G Xcode
cmake --build /path/to/app-build-ios-simulator \
--config Release
معماری دیگری را برای شبیهساز بهصورت دستی تحمیل نکنید، مگر اینکه مستندات فعلی Qt برای iOS صریحاً آن را پشتیبانی کند. فایل مشخصات انتشار، معماری شبیهساز را از مستندات فعلی Qt دریافت میکند.
WebAssembly.
هر نسخهٔ فرعی Qt یک نسخهٔ مشخص از Emscripten را هدف میگیرد. سامانهٔ شناسایی نسخه در حال حاضر 5.0.5را انتخاب میکند. برای ساخت پایه دقیقاً از همین نسخه استفاده کنید و نصب emsdk را از پروژههای نامرتبط Emscripten جدا نگه دارید.
macOS / Linux: نصب و فعالسازی Emscripten SDK سازگار
export EMSCRIPTEN_VERSION="5.0.5"
export EMSDK_ROOT="$HOME/Qt/Toolchains/emsdk"
mkdir -p "$HOME/Qt/Toolchains"
if [ ! -d "$EMSDK_ROOT/.git" ]; then
git clone https://github.com/emscripten-core/emsdk.git "$EMSDK_ROOT"
fi
cd "$EMSDK_ROOT"
./emsdk install "$EMSCRIPTEN_VERSION"
./emsdk activate "$EMSCRIPTEN_VERSION"
test -f "$EMSDK_ROOT/.emscripten" || {
echo "Emscripten activation failed: $EMSDK_ROOT/.emscripten is missing" >&2
exit 1
}
source "$EMSDK_ROOT/emsdk_env.sh"
command -v em++
em++ --version
em++ --version | grep -F "$EMSCRIPTEN_VERSION"
install و activate دو دستور جداگانه هستند.
اگر این دو دستور اشتباهاً به هم بچسبند، SDK فعال نمیشود و .emscripten ساخته نمیشود. اجرای emsdk_env.sh بهتنهایی کافی نیست. Qt هنگام شناسایی WebAssembly فایل $EMSDK/.emscripten را میخواند.
اصلاح نصب emsdk وقتی خطای .emscripten: No such file or directory
export EMSCRIPTEN_VERSION="5.0.5"
cd "$HOME/Qt/Toolchains/emsdk"
./emsdk install "$EMSCRIPTEN_VERSION"
./emsdk activate "$EMSCRIPTEN_VERSION"
source ./emsdk_env.sh
test -f "$EMSDK/.emscripten"
em++ --version
em++ --version | grep -F "$EMSCRIPTEN_VERSION"
اگر em++ --version هنوز یک نسخهٔ توسعهای متفاوت مانند *-gitنشان میدهد، ساخت پایهٔ Qt را ادامه ندهید. دوباره activateرا اجرا کنید، محیط را دوباره بارگذاری کنید و پیش از پیکربندی Qt نسخه را بررسی کنید.
نصب در Windows PowerShell
این بخش را فقط در PowerShell روی Windows اجرا کنید. دستورهای Set-Location, .bat یا .ps1 را در zsh/bash روی macOS یا Linux اجرا نکنید.
$env:EMSCRIPTEN_VERSION = "5.0.5"
$emsdkRoot = "$HOME\Qt\Toolchains\emsdk"
if (-not (Test-Path "$emsdkRoot\.git")) {
git clone https://github.com/emscripten-core/emsdk.git $emsdkRoot
}
Set-Location $emsdkRoot
.\emsdk.bat install $env:EMSCRIPTEN_VERSION
.\emsdk.bat activate $env:EMSCRIPTEN_VERSION
.\emsdk_env.ps1
em++ --version
SDK پایهٔ تکریسمانی
پس از شکست پیکربندی، پیش از تلاش دوباره درخت ساخت ناقص را حذف کنید. پیکربندی ناموفق فایل قابلاستفادهٔ build.ninja یا cmake_install.cmake.
export EMSCRIPTEN_VERSION="5.0.5"
export EMSDK_ROOT="$HOME/Qt/Toolchains/emsdk"
cd "$EMSDK_ROOT"
./emsdk activate "$EMSCRIPTEN_VERSION"
source "$EMSDK_ROOT/emsdk_env.sh"
test -f "$EMSDK_ROOT/.emscripten"
em++ --version | grep -F "$EMSCRIPTEN_VERSION"
rm -rf "$HOME/Qt/Build/6.12.0/wasm"
mkdir -p "$HOME/Qt/Build/6.12.0/wasm"
cd "$HOME/Qt/Build/6.12.0/wasm"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/configure" \
-qt-host-path "$HOME/Qt/6.12.0/host" \
-platform wasm-emscripten \
-prefix "$HOME/Qt/6.12.0/wasm" \
-release
cmake --build . --parallel
cmake --install .
Build با Threads + SIMD
export EMSCRIPTEN_VERSION="5.0.5"
export EMSDK_ROOT="$HOME/Qt/Toolchains/emsdk"
cd "$EMSDK_ROOT"
./emsdk activate "$EMSCRIPTEN_VERSION"
source "$EMSDK_ROOT/emsdk_env.sh"
test -f "$EMSDK_ROOT/.emscripten"
em++ --version | grep -F "$EMSCRIPTEN_VERSION"
rm -rf "$HOME/Qt/Build/6.12.0/wasm-threads-simd"
mkdir -p "$HOME/Qt/Build/6.12.0/wasm-threads-simd"
cd "$HOME/Qt/Build/6.12.0/wasm-threads-simd"
"$HOME/Qt/Src/qt-everywhere-src-6.12.0/configure" \
-qt-host-path "$HOME/Qt/6.12.0/host" \
-platform wasm-emscripten \
-prefix "$HOME/Qt/6.12.0/wasm-threads-simd" \
-release \
-feature-thread \
-feature-wasm-simd128
cmake --build . --parallel
cmake --install .
WebAssembly چندریسمانی به cross-origin isolation و بستر امن نیاز دارد. قابلیتهایی مثل SIMD، استثنا، پیونددهی پویا و Asyncify باید با مستندات فعلی Qt WebAssembly و مرورگرهای واقعی مقصد بررسی شوند.
«Qt کامل» دقیقاً یعنی چه.
از بستهٔ کامل سورس Qt استفاده کنید و از -skip دوری کنید مگر اینکه ماژول عمداً حذف شده باشد. Qt همچنان فقط ماژولهایی را ساخت میکند که هدف فعلی پشتیبانی کند و وابستگیها خارجیشان فراهم باشد. میزبان دسکتاپ، Android، iOS و WebAssembly SDKهای جدا هستند و مجموعه ماژول یکسانی ندارند.
موفق شدن command کافی نیست اگر قابلیت موردنیاز بهدلیل نبود وابستگی سیستمی بیصدا غیرفعال شده باشد. هر قابلیت غیرمنتظرهٔ غیرفعال را پیکربندی failure در نظر بگیرید.
پروژههای Qt مدرن همچنان پروژههای C++ مدرن هستند.
Qt دلیلی برای بازگشت به معماری فایل سرآیند-first یا الگوهای قدیمی کنسول نیست. کد دامنه/برنامه را در project ماژولها نگه دارید، برای برنامههای گرافیکی جدید از Qt Quick/QML بهعنوان presentation سازگارکننده استفاده کنید و مرز C++/QML را صریح نگه دارید.
cmake_minimum_required(VERSION 3.30)
project(GenyleapSample
VERSION 0.1.0
LANGUAGES CXX
)
add_library(genyleap_sample_core)
target_compile_features(genyleap_sample_core
PUBLIC
cxx_std_26
)
target_sources(genyleap_sample_core
PUBLIC
FILE_SET CXX_MODULES
FILES
src/domain/app_domain.cppm
PRIVATE
src/domain/app_domain.cpp
)
set_property(
TARGET genyleap_sample_core
PROPERTY CXX_SCAN_FOR_MODULES ON
)
find_package(Qt6 6.12 REQUIRED COMPONENTS
Quick
Qml
QuickControls2
)
if(QT_KNOWN_POLICY_QTP0004)
qt_policy(SET QTP0004 NEW)
endif()
qt_standard_project_setup(REQUIRES 6.12)
qt_add_executable(GenyleapSample
src/bootstrap/main.cpp
)
qt_add_qml_module(GenyleapSample
URI Genyleap.Sample
VERSION 1.0
QML_FILES
ui/Main.qml
)
target_link_libraries(GenyleapSample
PRIVATE
genyleap_sample_core
Qt6::Quick
Qt6::Qml
Qt6::QuickControls2
)
target_compile_features(GenyleapSample
PRIVATE
cxx_std_26
)
src/bootstrap/main.cpp#include <cstdlib>
#include <QCoreApplication>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QObject>
#include <QQuickStyle>
#include <QString>
int main(int argc, char* argv[])
{
QGuiApplication application {argc, argv};
QQuickStyle::setStyle(QStringLiteral("Basic"));
QQmlApplicationEngine engine;
QObject::connect(
&engine,
&QQmlApplicationEngine::objectCreationFailed,
&application,
[] {
QCoreApplication::exit(EXIT_FAILURE);
},
Qt::QueuedConnection
);
engine.loadFromModule("Genyleap.Sample", "Main");
return application.exec();
}
import std; بهانهای برای کنار گذاشتن ماژولها نکنید.
ماژولهای C++ متعلق به پروژه همچنان معماری اصلی هستند. فایلهای سرآیند standard library میتوانند در سراسری ماژول fragment متنی باقی بمانند تا زمانی که مسیر standard ماژول یک انتخاب آگاهانه و بررسیشدهٔ پروژه باشد.
نصب و پیکربندی Qt Creator.
آخرین نسخهٔ پایدار Qt Creator که از فهرست رسمی latest Qt شناسایی شده 20.0.2است. بستهٔ مستقل رسمی فقط محیط توسعه را نصب میکند؛ SDKهای Qt که خودتان ساختهاید در همان مسیرهای فعلی باقی میمانند و بعداً بهعنوان نسخههای Qt و Kitها در Qt Creator ثبت میشوند.
macOS · بستهٔ رسمی یونیورسال
cd "$HOME/Downloads"
curl -fLO "https://download.qt.io/official_releases/qtcreator/latest/qt-creator-opensource-mac-universal-20.0.2_installer.dmg"
open "qt-creator-opensource-mac-universal-20.0.2_installer.dmg"
برای نصب سادهتر از طریق مدیر بسته، brew install --cask qt-creator نیز قابل استفاده است، اما Qt نسخههای Qt Creator ارائهشده توسط مدیرهای بسته را بهصورت رسمی پشتیبانی نمیکند.
Linux · نصبکنندهٔ مستقل رسمی
x86_64
cd "$HOME/Downloads"
curl -fLO "https://download.qt.io/official_releases/qtcreator/latest/qt-creator-opensource-linux-x86_64-20.0.2.run"
chmod +x "qt-creator-opensource-linux-x86_64-20.0.2.run"
./"qt-creator-opensource-linux-x86_64-20.0.2.run"
arm64
cd "$HOME/Downloads"
curl -fLO "https://download.qt.io/official_releases/qtcreator/latest/qt-creator-opensource-linux-arm64-20.0.2.run"
chmod +x "qt-creator-opensource-linux-arm64-20.0.2.run"
./"qt-creator-opensource-linux-arm64-20.0.2.run"
بستههای توزیعهای Linux ممکن است از نسخهٔ فعلی Qt Creator عقبتر باشند؛ اگر پشتهٔ توسعه باید همیشه نسخهٔ جاری را دنبال کند، از نصبکنندهٔ رسمی استفاده کنید.
Windows · نصبکنندهٔ مستقل رسمی
x86_64
Set-Location "$HOME\Downloads"
Invoke-WebRequest -Uri "https://download.qt.io/official_releases/qtcreator/latest/qt-creator-opensource-windows-x86_64-20.0.2.exe" -OutFile "qt-creator-opensource-windows-x86_64-20.0.2.exe"
Start-Process -Wait ".\qt-creator-opensource-windows-x86_64-20.0.2.exe"
ARM64
Set-Location "$HOME\Downloads"
Invoke-WebRequest -Uri "https://download.qt.io/official_releases/qtcreator/latest/qt-creator-opensource-windows-arm64-20.0.2.exe" -OutFile "qt-creator-opensource-windows-arm64-20.0.2.exe"
Start-Process -Wait ".\qt-creator-opensource-windows-arm64-20.0.2.exe"
choco install qtcreator هم در Windows بهعنوان روش جایگزین مدیر بسته در دسترس است؛ با این ملاحظه که این شیوه مسیر رسمی توزیع Qt Creator نیست.
ثبت SDKهای Qt که خودتان ساختهاید
ابتدا ساخت از خط فرمان را اثبات کنید
Compiler, CMake, Ninja and the target's qt-cmake باید خارج از IDE هم کار کنند.
افزودن نسخهٔ Qt
از مسیر Preferences → Kits → Qt Versions → Add بروید و فایل bin/qtpaths یا bin/qmakeمربوط به همان نصب Qt را انتخاب کنید. برای میزبان دسکتاپ از $HOME/Qt/6.12.0/host/bin/qtpaths.
برای هر هدف یک Kit جدا بسازید
تنظیمات Desktop، Android، iOS، شبیهساز iOS، WebAssembly و Remote Linux/دستگاه نهفته را در Kitهای جداگانه نگه دارید.
اتصال زنجیرهابزار
برای هر Kit، کامپایلر، CMake، مولد Ninja، اشکالزدا، نسخهٔ Qt و دستگاه اجرا را مطابق همان هدف انتخاب کنید. اجازه ندهید کامپایلر میزبان وارد Kit مربوط به هدف کامپایل متقابل شود.
"$HOME/Qt/6.12.0/host/bin/qtpaths" --qt-version
"$HOME/Qt/6.12.0/host/bin/qtpaths" --install-prefix
"$HOME/Qt/6.12.0/host/bin/qt-cmake" --version
برد را در Preferences → Devicesاضافه کنید، سپس Kitای بسازید که از کامپایلر متقابل منطبق، Qt نهفتهٔ ساختهشده و دستگاه اجرای راهدور استفاده کند. Qt Creator میتواند برنامه را از طریق اتصال تنظیمشده روی دستگاه مستقر و اجرا کند.
Qt WebEngine و Qt PDF وابستگی نسخهای مستقل دارند.
نسخهٔ WebEngine/PDF را بهصورت مکانیکی از نسخهٔ پایهٔ Qt استخراج نکنید. cadence انتشار آنها میتواند با بستهٔ اصلی Qt فرق کند. آنها را وابستگیها جداگانه بدانید و پیش از افزودن به ساخت از کد منبع خط مبنا، یادداشت انتشارهای فعلی را بررسی کنید.
پیش از آماده اعلام کردن، هر هدف را بررسی کنید.
"$HOME/Qt/6.12.0/host/bin/qtpaths" --qt-version
"$HOME/Qt/6.12.0/host/bin/qtpaths" --install-prefix
"$HOME/Qt/6.12.0/host/bin/qt-cmake" --version
سپس یک برنامه واقعی را با qt-cmakeمخصوص همان هدف پیکربندی و ساخت کنید. برای برنامهٔ گرافیکی، ساخت شدن کتابخانهٔ اصلی کافی نیست: MOC تولیدشده، QML ثبت نوع، منابع، QML lint و مسیر آزمون اولیهٔ زمان اجرا قطعی همگی بخشی از اعتبارسنجی نهاییاند.