Сборка из исходников
Требования: Bun, CMake (≥ 3.21), компилятор C++20 и dev-файлы Qt 6.9+, включая модуль WebSockets.
# Debian/Ubuntu
sudo apt install g++ cmake qt6-base-dev qt6-base-dev-tools qt6-declarative-dev \
qt6-websockets-dev qml6-module-qtquick qml6-module-qtquick-controls
# Fedora
sudo dnf install gcc-c++ cmake qt6-qtbase-devel qt6-declarative-devel qt6-qtwebsockets-devel
# Arch
sudo pacman -S base-devel cmake qt6-base qt6-declarative qt6-websockets qt6-quickcontrols2
# macOS
brew install cmake qt
# Windows: поставьте Qt 6.9 через онлайн-установщик и передайте -DCMAKE_PREFIX_PATH=<qt>/lib/cmake
Затем:
bun install
cmake -S . -B build && cmake --build build
Сборка создаёт:
build/bin/qml-host— Qt-хост (рендерит QML, нативные диалоги/трей);build/bin/bridge— супервизор процессов на C++ для рантайма;build/bin/launcher— лончер без Qt для однофайловых приложений.
Qt ищется через CMake find_package(Qt6), поэтому при нестандартном пути
передай -DCMAKE_PREFIX_PATH=<qt>. PULSAR_QMAKE по-прежнему задаёт qmake
для упаковки (pulsar build встраивает Qt).
Релизы собираются CI-матрицей (.github/workflows/release.yml) на Linux, macOS
и Windows, с платформенной упаковкой Qt (ldd в Linux, otool + копирование
фреймворков в macOS, windeployqt в Windows).
Раскладка одного файла
pulsar build дописывает payload к launcher:
[ launcher ][ контейнер payload ][ смещение payload + магия ]
├─ bin/qml-host, bin/bridge, bin/qt.conf
├─ runtime (Bun standalone: рантайм + приложение + SDK)
├─ app/… (QML, ассеты, манифест)
└─ lib/Qt/… (встроенный Qt, Linux/macOS)
или DLL Qt рядом с хостом в Windows
При запуске лончер распаковывает payload в кэш пользователя и делает exec
хоста, который грузит собственный Qt — из lib/Qt по RPATH в Linux/macOS либо
из DLL рядом с exe в Windows — никогда из системы. Используйте --slim, чтобы
не класть Qt и опираться на системную установку.
pulsar build переиспользует Qt из установленного toolchain; если у хоста
нет встроенного Qt (dev-сборки), берётся Qt из qmake. Переменная
PULSAR_QT_ROOT указывает на конкретное дерево Qt.