Пакет для сборки проектов - astra-cmake-build#
О странице#
astra-cmake-build - пакет для сборки проектов, базирующихся на CMake, за основу был взят функционал в flybuild.
Примечание
flybuild - пакет для сборки проектов, базирующихся на QMake, считается устаревшим.
При разработке astra-cmake-build, некоторые части стали не поддерживаемые, так как есть современные аналоги в CMake и KDE.
Данная страница будет интересна для разработчиков Astra Linux, которые разрабатывают проекты на CMake, а так же разработчикам, которые занимаются перестроением legacy-проектной базы с QMake на CMake.
Примечание
Для использования любого предоставленного функционала на данной странице, нужно установить пакет astra-cmake-build.
Пакеты для сборки#
В debian/contol можно подключать так:
Build-Depends: astra-cmake-build,
...
Примечание
При подключении пакета astra-cmake-build, можно не подключать пакеты cdbs и debhelper, так как они записаны в зависимостях у пакета astra-cmake-build.
Подключение в debian/rules#
В debian/rules можно подключать так:
#!/usr/bin/make -f
include /usr/share/astra-cmake-build/fly.mk
Или так:
#!/usr/bin/make -f
include /usr/share/astra-cmake-build/astra.mk
В последнем случае не будут загружены переменные для Fly.
Переменные для Astra#
В astra-cmake-build есть следующие переменные:
ASTRA_VARS_OS_BASE- базирующийся выпуск Debian для ОС Astra Linux. Аналог переменнойFLY_OS_BASE, изflybuild. Принимает следующие значения:stretch
buster
bookworm
…
ASTRA_VARS_OS_GENERATION- номер поколения для ОС ||AL||. Аналог переменнойFLY_OS_GENERATION, изflybuild. Принимает следующие значения:6
7
8
…
ASTRA_VARS_OS_EDITION- версия ОС Astra Linux:Common EditionилиSpecial Edition. Аналог переменнойFLY_OS_EDITION, изflybuild. Принимает следующие значения:CE
SE
Подключить переменные можно:
find_package(Astra COMPONENTS Vars REQUIRED)
Для примера использования данных переменных, можно посмотреть подпроект astra-cmake-variables-sample, в проекте astra-cmake-samples.
Переменные для Fly#
В astra-cmake-build были портированы переменные fly из flybuild:
Переменная в astra-cmake-build |
Переменная из flybuild |
Стандартный путь |
|---|---|---|
FLY_VARS_INSTALL_PREFIX |
FLY_INSTALL_PREFIX |
/usr |
FLY_VARS_INSTALL_FULL_BINDIR |
FLY_INSTALL_BINS |
/usr/bin |
FLY_VARS_INSTALL_FULL_LIBDIR |
FLY_INSTALL_LIBS |
/usr/lib |
Не поддерживается |
FLY_INSTALL_PLUGINS |
Не поддерживается |
FLY_VARS_INSTALL_FULL_INCLUDEDIR |
FLY_INSTALL_HEADERS |
/usr/include/fly |
FLY_VARS_INSTALL_FULL_ICONSDIR |
FLY_INSTALL_ICONS |
/usr/share/icons |
FLY_VARS_INSTALL_FULL_FLYDATADIR |
FLY_INSTALL_DATA |
/usr/share/fly/data |
FLY_VARS_INSTALL_FULL_TRANSLATIONSDIR |
FLY_INSTALL_TRANSLATIONS |
/usr/share/fly/translations |
FLY_VARS_INSTALL_FULL_DESKTOP_APP_FILESDIR |
FLY_INSTALL_DESKTOP_FILES |
/usr/share/applications |
FLY_VARS_INSTALL_FULL_HELP_DOCSDIR |
FLY_INSTALL_DOCS |
/usr/share/doc/fly/qthelp |
Подключить переменные можно:
find_package(Fly COMPONENTS Vars REQUIRED)
Для примера использования данных переменных, можно посмотреть подпроект astra-cmake-variables-sample, в проекте astra-cmake-samples.
Генерация иконок из SVG в PNG#
Примечание
Для работы данного функционала, может понадобится вручную подключать пакет librsvg2-bin, в которой находится утилита rsvg-convert.
В astra-cmake-build доступны CMake макросы:
astra_icons_convert_svg2png- конвертирует SVG файл в PNG файлы, список сгенерированных PNG файлов сохраняет в указанную переменную, так же вместо переменной можно указатьtarget;astra_install_svg2png_icons- конвертирует SVG файл в PNG файлы и устанавливает PNG файлы;astra_install_svg2png_dir- сканирует файлы в директории, конвертирует найденные SVG файлы в PNG файлы, устанавливает PNG файлы;
Стандартная директория для установки PNG иконок: /usr/share/icons/hicolor/hicolor/.
Для смены директории для установки PNG иконок, то можно задать CMake переменную: ASTRA_INSTALL_SVG2PNG_FULL_ICONSDIR.
Подключить макросы можно:
find_package(Astra COMPONENTS Icons REQUIRED)
Для примера использования данных макросов, можно посмотреть подпроект astra-icons-sample, в проекте astra-cmake-samples.
Подключение к Astra библиотекам#
libpdp#
Примечание
Для работы данного функционала, нужно вручную подключать пакет libpdp-dev.
Подключить библиотеку можно:
find_package(Astra COMPONENTS PDP REQUIRED)
...
target_link_libraries(libpdp-sample
...
Astra::PDP
)
Для примера подключения к библиотеки, можно посмотреть подпроект libpdp-sample, в проекте astra-cmake-samples.
Подключение к Fly библиотекам#
libflycore#
Примечание
Для работы данного функционала, нужно вручную подключать пакет libflycore-dev.
Подключить библиотеку можно:
find_package(Fly COMPONENTS Core REQUIRED)
...
target_link_libraries(libflycore-sample
...
Fly::Core
)
Для примера подключения к библиотеки, можно посмотреть подпроект libflycore-sample, в проекте astra-cmake-samples.
libflyintegration#
Примечание
Для работы данного функционала, нужно вручную подключать пакет libflyintegration-dev.
Подключить библиотеку можно:
find_package(Fly COMPONENTS Integration REQUIRED)
...
target_link_libraries(fly-integration-sample
...
Fly::Integration
)
Для примера подключения к библиотеки, можно посмотреть подпроект fly-integration-sample, в проекте astra-cmake-samples.
libflyuiaux#
Примечание
Для работы данного функционала, нужно вручную подключать пакет libflyui-dev.
Подключить библиотеку можно:
find_package(Fly COMPONENTS UIAux REQUIRED)
...
target_link_libraries(libuiaux-sample
...
Fly::UIAux
)
Для примера подключения к библиотеки, можно посмотреть подпроект libuiaux-sample, в проекте astra-cmake-samples.
libflyuiextra#
Примечание
Для работы данного функционала, нужно вручную подключать пакет libflyui-dev.
Подключить библиотеку можно:
find_package(Fly COMPONENTS UIExtra REQUIRED)
...
target_link_libraries(libuiextra-sample
...
Fly::UIExtra
)
Для примера подключения к библиотеки, можно посмотреть подпроект libuiextra-sample, в проекте astra-cmake-samples.
libflyuinet#
Примечание
Для работы данного функционала, нужно вручную подключать пакет libflyui-dev.
Подключить библиотеку можно:
find_package(Fly COMPONENTS UINet REQUIRED)
...
target_link_libraries(libuinet-sample
...
Fly::UINet
)
Для примера подключения к библиотеки, можно посмотреть подпроект libuinet-sample, в проекте astra-cmake-samples.
Подключение к библиотеке QtSingleApplication#
Примечание
Для работы данного функционала, нужно вручную подключать пакет libqtsingleapplication-dev.
Подключить библиотеку можно:
find_package(Qt5 COMPONENTS SingleApplication REQUIRED)
...
target_link_libraries(qt-single-application-sample
...
Qt5::SingleApplication
)
Для примера подключения к библиотеки, можно посмотреть подпроект qt-single-application-sample, в проекте astra-cmake-samples.
Подключение к библиотеке QtSingleCoreApplication#
Примечание
Для работы данного функционала, нужно вручную подключать пакет libqtsingleapplication-dev.
Подключить библиотеку можно:
find_package(Qt5 COMPONENTS SingleCoreApplication REQUIRED)
...
target_link_libraries(qt-single-core-application-sample
...
Qt5::SingleCoreApplication
)
Для примера подключения к библиотеки, можно посмотреть подпроект qt-single-core-application-sample, в проекте astra-cmake-samples.
Кэширование QML и JavaScript файлов#
Примечание
Для работы данного функционала, нужно вручную подключать пакет qtdeclarative5-dev-tools.
Для генерации кэшированных QML и JavaScript файлов, можно воспользоваться макросами:
astra_qtquick_compiler_convert- кэширует QML и JavaScript файлы, список сгенерированных файлов сохраняет в указанную переменную, так же вместо переменной можно указатьtarget;astra_qtquick_compiler_install_package- установка пакетаkpackageс кэшированными QML и JavaScript файлами. АналогCMakeфункцииkpackage_install_package(...), который не кэширует файлы.
Подключить макросы можно:
find_package(Qt5 COMPONENTS AstraQuickCompiler REQUIRED)
Примечание
Принцип кэширования заключается в конвертации формата файлов qml, js, mjs в файлы qmlc, jsc, mjsc, соответственно, а так же установка этих кэшированных файлов, вместо оригинальных qml, js, mjs файлов.
При кэшировании используется утилита qmlcachegen.
Использование кэширование файлов позволяет:
Скрывать оригинальный код QML и JavaScript файлов;
Увеличивает эффективность интерпретации QML и JavaScript файлов;
Если нужно хранить кэшированные QML и JavaScript файлы в ресурсах, то данный функционал не подходит и нужно использовать стандартные функции СMake из Qt: qtquick_compiler_add_resources(…).
Для примера использования данных макросов, можно посмотреть подпроект kcm-qml, в проекте astra-templates.
Запуск unit тестов при сборке пакета#
Предупреждение
Не поддерживается, на CMake версиях ниже 3.8.0. То есть не поддерживается для Astra Linux 1.6 и поколений ОС ниже.
В astra-cmake-build, при сборке пакета можно включить выполнение тестов с помощью CTest.
Для того, чтобы тесты запускались нужно:
В файле
debin/rulesзадать переменнуюASTRA_CTEST_ENABLEс значением1:
#!/usr/bin/make -f
ASTRA_CTEST_ENABLE ?= 1
include /usr/share/astra-cmake-build/astra.mk
Примечание
Включение переменной ASTRA_CTEST_ENABLE может активировать другие тесты, при сборке пакетов, так как дополнительно регулируется переменная DEB_BUILD_OPTIONS, а точнее удаляется значение nocheck у переменной DEB_BUILD_OPTIONS.
Рекомендуется учитывать этот момент и отключать сторонние тесты, которые не нужны.
В корневом файле проекта
CMakeLists.txt, добавить enable_testing():
...
enable_testing()
...
Сделать проект для теста, например в виде QTest - проекта, пример можно взять из проекта «astra-cmake-samples», подпроект «unit-test». Главное, чтобы была CMake команда add_test(…):
...
add_test(NAME Test1 COMMAND Test1)
...
В случае, если тест выполняется с использованием внутренней библиотеки-проекта, то для теста нужно задать переменную
LD_LIBRARY_PATH:
...
set_tests_properties(Test1 PROPERTIES
ENVIRONMENT "LD_LIBRARY_PATH=${libproject_BINARY_DIR}:${LD_LIBRARY_PATH}"
)
...
, где libproject - название проекта для внутренней библиотеки;
Теперь при сборке пакета, будут выполняться тесты. В случае неудачного прохождения теста, то сборка пакета будет завершаться с ошибкой.
Не перенесённое из flybuild в astra-cmake-build#
KAuth#
Весь функционал из flybuild по работе с KAuth, лучше перевести на оригинальный KAuth.
KConfig#
Весь функционал из flybuild по работе с KConfig, лучше перевести на оригинальный KConfig.
QTranslations#
Весь функционал из flybuild по работе с QTranslations, лучше перевести на KDE i18n.