git clone https://github.com/heimdallr/books.git --recursive
Проверялось на Windows 10 и 11, компилятор от MS в средах MSVS2022 и QtCreator
- conan.exe
- cmake.exe, версия cmake должна поддерживать вашу версию MSVS, conan,... короче, берите cmake посвежее
- git.exe, необязательно, но полезно, позволит в логах видеть хэш текущего коммита
- Inno Setup, если нужен инсталлятор
В батнике configure.bat поменять пути к зависимостям на ваши, запустить его. Возможно, сработают и другие способы, типа cmake-gui, или открыть в MSVS папку с исходниками.
В результате конфигурирования в папке build будет создан солюшн FLibrary.sln. В нём надо собрать проект FLibrary.
- Можно запустить батник build.bat. Если окружение настроено правильно, то в папке build/installer будут собраны инсталляторы и архив портабельной версии программы.
- Можно открыть CMakeLists.txt в QtCreator
Проверялось на Ubuntu 24.04, компилировалось gcc 15.2, 16.1
cd your/path/to/cloned/repo/books
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DQt6_DIR=your/path/to/Qt6/lib/cmake/Qt6 -G Ninja
cmake --build .
cmake --install .
- Запустить скрипт
build.sh. В результате в папке build будет создан архив FLibrary-x.y.z-portable-Linux.tar.xz - Запустить скрипт с параметром
build.sh DEB. В папке build будет собран пакет FLibrary-x.y.z-setup-Linux.deb
- При использовании Qt, не собранного статически с libjpeg, возможна runtime-ошибка
qt.gui.imageio.jpeg: Wrong JPEG library version: library is 90, caller expects 62. Некоторым помогает добавление в началоstart.shуказанияLD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjpeg.so.62.x.y, где x.y - ваша версия системной libjpeg.so. Спасибо уважаемому Simply234 за этот workaround. - Ошибка munmap_chunk(): invalid pointer при вызове окна выбора каталога. В start.sh добавил строку export QT_QPA_PLATFORMTHEME=generic - тема qt стала по умолчанию и окно выбора каталога перестало падать. К сожалению тему теперь не изменить. Linux Mint Mate 22.3 Zena.
Скрипт `build-mac.sh` собирает `FLibrary.app`, добавляет HD-иконку, раскладывает Qt/framework зависимости внутрь bundle, подписывает приложение ad-hoc подписью и собирает DMG с `FLibrary.app` и ссылкой `Applications` для установки drag-and-drop.
Нужны Xcode Command Line Tools или Xcode, Homebrew, CMake, Ninja, Conan 2, Qt 6, p7zip и librsvg:
brew install cmake ninja conan qt qtwebengine qtvirtualkeyboard p7zip librsvg
qtwebengine и qtvirtualkeyboard нужны потому, что часть Qt image/input plugins может ссылаться на QtPdf и QtVirtualKeyboard frameworks. Скрипт подтягивает эти frameworks в .app, если соответствующие плагины попали в bundle.
Обычная сборка:
./build-mac.sh
По умолчанию скрипт пробует собрать два DMG:
arm64
x86_64
Если зависимостей для одной архитектуры нет, она будет пропущена. Это удобно на Apple Silicon: arm64 собирается из /opt/homebrew, а x86_64 будет пропущен, если Intel Homebrew в /usr/local не установлен.
Собрать только Apple Silicon:
ARCHS=arm64 ./build-mac.sh
Собрать только Intel:
ARCHS=x86_64 ./build-mac.sh
Требовать, чтобы все запрошенные архитектуры обязательно собрались:
ALLOW_MISSING_ARCHS=0 ./build-mac.sh
Готовые образы появляются внутри build-каталога. По умолчанию:
build/FLibrary-<version>-macOS-arm64.dmg
build/FLibrary-<version>-macOS-x86_64.dmg
Если задан BUILD_DIR, DMG будет записан в этот build root:
BUILD_DIR=out ./build-mac.sh
out/FLibrary-<version>-macOS-<arch>.dmg
Отдельный каталог для готовых артефактов можно задать через ARTIFACT_DIR.
Внутри DMG лежит FLibrary.app и ссылка Applications. Пользователь может открыть DMG и перетащить приложение в Applications.
Для x86_64 нужны именно x86_64-срезы Qt и p7zip. Обычно это Intel Homebrew, установленный под Rosetta в /usr/local:
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
arch -x86_64 /usr/local/bin/brew install cmake ninja conan qt qtwebengine qtvirtualkeyboard p7zip librsvg
После этого можно запускать:
./build-mac.sh
Если Qt или p7zip лежат нестандартно, пути можно указать явно:
QT_PREFIX_X86_64=/usr/local/opt/qt \
P7ZIP_DIR_X86_64=/usr/local/opt/p7zip/lib/p7zip \
./build-mac.sh
Для arm64 аналогичные переменные:
QT_PREFIX_ARM64=/opt/homebrew/opt/qt
P7ZIP_DIR_ARM64=/opt/homebrew/opt/p7zip/lib/p7zip
Скрипт сам выполняет:
codesign --verify --deep --strict
FLibrary.app/Contents/MacOS/FLibrary --version
hdiutil verify build/FLibrary-<version>-macOS-<arch>.dmg
Также bundle проверяется на локальные absolute paths вроде /opt/homebrew, /usr/local и /Users. Такие зависимости не должны оставаться внутри готового DMG.
Сейчас используется ad-hoc подпись:
codesign --sign -
Этого достаточно для локальной проверки bundle, но для публичного релиза через Gatekeeper нужен Developer ID certificate и notarization. Это отдельный release step, не выполняемый build-mac.sh.
missing command: rsvg-convert- установитеlibrsvg:brew install librsvg.skipping x86_64: Qt with x86_64 slice was not found- установите Intel Homebrew в/usr/localи поставьтеx86_64Qt/p7zip, либо укажитеQT_PREFIX_X86_64иP7ZIP_DIR_X86_64.Finder layout was skipped- на headless/CI окружениях Finder может не сохранить фон и позиции иконок. Это warning: DMG все равно содержитFLibrary.appиApplicationssymlink.

