Твій охайний шаблон для C++ програми за адресою GitHub репозиторію https://github.com/yuriysydor1991/cpp-app-template
Ціль проекту-шаблону
Проект-шаблон призначений для пришвидшення процесу побудови програми на стадії започаткування проекту за допомогою готової початкової структури програми. Отож розробник може одразу перейти до реалізації конкретної програми з мінімальними затратами на базову структуру.
Полегшує вийти за рамки коду - створюй складні і готові до поставки програмний продукти швидко!
Дозволяє стрімке створення завершеного програмного продукту - на противагу звичайного куска коду чи простої програми.
Шаблонний проект не являється фреймворком у традиційних термінах, отож інфраструктурні елементи можна змінювати за бажанням або видалити за непотреби.
Створи форк і одразу реалізуй програму!
Спеціалізації шаблонного проекту
Переглянь доступні гілки у репозиторії проекту-шаблону і використай найбільш підходящу спеціалізацію або комбінуй декілька гілок щоб створити необхідну структуру шаблону:
Базова структура програми
- гілка main розміщена на [GitHub, GitLab] - один файл з функцією
mainі з усіма можливими інтеграціями для генерації одного бінарного виконуваного файлу. - гілка app розміщена на [GitHub, GitLab] яка містить загальні інфраструктурні класи програми для генераці одинарного бінарного виконуваного файлу.
- гілка applib розміщена на [GitHub, GitLab] яка складається з класів бінарного виконуваного файлу з додатковими інфраструктурними класами для генерації підключаємої бібліотеки і заголовкових файлів (доступні для встановлення), що призначені для поширення коду бібліотеки для повторного перевикористання іншими бінарними файлами.
- гілка lib розміщена на [GitHub, GitLab] і яка призначена для предоставляння початкової інфраструктури для реалізації бібліотеки разом з заголовковими підключаємими файлами і документацією за необхідності.
- гілка appMeson розміщена на [GitHub, GitLab] яка містить загальні інфраструктурні класи програми для генераці одинарного бінарного виконуваного файлу разом з системою побудови Meson.
- гілка libMeson розміщена на [GitHub, GitLab] - шаблон бібліотеки з заголовковими підключаємими файлами і документацією, побудованою системою Meson, що знаходиться проектами-споживачами на Meson через
dependency()(pkg-config) з опціональною підтримкою CMakefind_package().
Логування
- гілка appLog4Cpp5 розміщена на [GitHub, GitLab] котра містить інфраструктуру для швидкого старту розробки застосунку з використанням багатофункціональної бібліотеки логування повідомлень log4cpp.
- гілка appBoostLog розміщена на [GitHub, GitLab] котра містить інфраструктуру для швидкого старту розробки застосунку з використанням бібліотеки логування повідомлень Boost.Log.
Віконні системи / GUI
- гілка appQt6 розміщена на [GitHub, GitLab] яка містить загальні класи для генерації бінарного виконуваного файлу разом з структурою заданою для розробки віконної програми на базі Qt6 разом з QML.
- гілка appGtkmm3 розміщена на [GitHub, GitLab] яка містить загальні класи для генерації бінарного виконуваного файлу разом з структурою заданою для розробки віконної програми на базі Gtkmm-3.0 з C++.
- гілка appGtkmm3Glade розміщена на [GitHub, GitLab] яка містить загальні класи для генерації бінарного виконуваного файлу разом з структурою заданою для розробки віконної програми на базі C++ з Gtkmm-3.0 і Glade - програми для створення візульних інтерфейсів.
- гілка appGtkmm4 розміщена на [GitHub, GitLab] яка містить загальні класи для генерації бінарного виконуваного файлу разом з структурою заданою для розробки віконної програми на базі Gtkmm-4 з C++.
- гілка appwxWidgets розміщена на [GitHub, GitLab] яка містить загальні класи для генерації бінарного виконуваного файлу разом з структурою заданою для розробки кросплатформної віконної програми на базі wxWidgets з C++, що надається через CMake FetchContent.
3D / OpenGL
- гілка appSDL2 розміщена на [GitHub, GitLab] яка містить загальні класи для генераці одинарного бінарного виконуваного файлу разом з початковою інфраструктурою для розробки у OpenGL 3D разом з SDL2 і набагато більше!
- гілка appSFML розміщена на [GitHub, GitLab] яка містить загальні класи для генераці одинарного бінарного виконуваного файлу разом з початковою інфраструктурою на базі мультимедійної бібліотеки SFML (2D графіка, вікна, ввід та доступ до OpenGL), яка надається системним пакетом або резервним механізмом CMake FetchContent.
- гілка appFreeGlut розміщена на [GitHub, GitLab] яка містить загальні класи для генераці одинарного бінарного виконуваного файлу разом з початковою інфраструктурою для розробки у OpenGL 3D разом з FreeGlut.
Web / HTTP / Мережа
- гілка appWt4 розміщена на [GitHub, GitLab] - шаблон з інфраструктурою для швидкого старту реалізації Web-програми на основі Wt C++ фулстек фреймворку.
- гілка appBoostBeast розміщена на [GitHub, GitLab] котра містить інфраструктуру для швидкого старту розробки Web-програми з використанням швидкого HTTP сервера Beast від Boost.
- гілка appCURL розміщена на [GitHub, GitLab] котра містить інфраструктуру для швидкого старту розробки застосунку з використанням бібліотеки-клієнта CURL для завантажень даних з мережі і яка підтримує багато протоколів (включаючи HTTP).
Системи керування базами даних (СУБД) / SQL / NoSQL
- гілка appPgSQLxx розміщена на [GitHub, GitLab] котра містить інфраструктуру для швидкого старту розробки застосунку з використанням СУБД PostgreSQL.
- гілка appMySQLCppConn розміщена на [GitHub, GitLab] котра містить інфраструктуру для швидкого старту розробки застосунку з використанням СУБД MySQL.
- гілка appSQLiteCpp3 розміщена на [GitHub, GitLab] котра містить інфраструктуру для швидкого старту розробки застосунку з використанням СУБД SQLite через бібліотеку SQLiteCpp.
- гілка appMongoDBCpp4 розміщена на [GitHub, GitLab] котра містить інфраструктуру для швидкого старту розробки застосунку з використанням NoSQL СУБД MongoDB.
Візуалізація даних / Графіки / Діаграми / Карти
- гілка appMatPlotxx розміщена на [GitHub, GitLab] котра містить інфраструктуру для швидкого старту розробки застосунку з використанням MatPlot++ - бібліотеки для малювання графіків на основі програми gnuplot і Qt6.
- гілка appPLplot розміщена на [GitHub, GitLab] котра містить інфраструктуру для швидкого старту розробки застосунку з використанням PLplot - потужної бібліотеки генерації графіків котра використовується у наукових програмах з багатьма інтерфейсами для різних віконних систем і мов програмування, і можливостями експорту у найпопулярніші формати зображень (PNG, SVG, JPEG, GIF, PDF і інші).
- гілка appGtkmm4LeafLet розміщена на [GitHub, GitLab] яка містить загальні інфраструктурні класи програми для генераці одинарного бінарного виконуваного файлу з використанням Gtkmm-4 з WebKitGtk і картами LeafLet.
- гілка appQt6LeafLet розміщена на [GitHub, GitLab] яка містить загальні інфраструктурні класи програми для генераці одинарного бінарного виконуваного файлу разом з Qt6/QML і WebView QML а також картами LeafLet.
- гілка appQt6QtLocation розміщена на [GitHub, GitLab] яка містить загальні інфраструктурні класи програми для генераці одинарного бінарного виконуваного файлу що відображає мапу OpenStreetMap рідними засобами безпосередньо у вікні Qt6/QML за допомогою елемента Map з модуля Qt Location (рідний відповідник гілки appQt6LeafLet на основі WebView).
- гілка appQt6ChartView розміщена на [GitHub, GitLab] котра містить інфраструктуру для швидкого старту візуалізації даних і малювання графіків безпосередньо у вікні Qt6 QML за допомогою вбудованого елемента ChartView з модуля QtCharts.
Компʼютерний зір / Обробка зображень
- гілка appOpenCV розміщена на [GitHub, GitLab] котра містить інфраструктуру для швидкого старту розробки застосунку з використанням бібліотеки компʼютерного зору OpenCV.
Системні шини / DBus
- гілка appSDBusCxxClient розміщена на [GitHub, GitLab] яка містить загальні інфраструктурні класи програми для генераці одинарного бінарного виконуваного файлу з використанням бібліотеки sdbus-c++ від Kistler-Group для побудови клієнта сервісів розміщених на шині DBus.
- гілка appSDBusCxxServer розміщена на [GitHub, GitLab] яка містить загальні інфраструктурні класи програми для генераці одинарного бінарного виконуваного файлу з використанням бібліотеки sdbus-c++ від Kistler-Group для побудови сервера на шині DBus.
- гілка appQt6QtDBusClient розміщена на [GitHub, GitLab] яка містить загальні інфраструктурні класи програми для генераці одинарного бінарного виконуваного файлу що зчитує загальну системну інформацію зі служби systemd-hostnamed через шину DBus за допомогою рідного модуля Qt6 QtDBus і відображає її у вікні QML (відповідник гілки appSDBusCxxClient на основі sdbus-c++ для фреймворку Qt6).
Редагуй файли README.md і CHANGELOG.md щоб документація відповідала впровадженому коду. Для перекладів файлу README.md:
- uk_UA за відносною адресою doc/README.uk_UA.md
Вбудовані можливості та інтеграції
Окрім спеціалізованих гілок, проект-шаблон містить набір вбудованих, вмиканих за потреби (opt-in) інтеграцій та цілей CMake, які активуються відповідними змінними під час конфігурування. Детальні інструкції з вмикання кожної з них наведені у файлі README.md та у відповідних розділах документації під doc/sections/.
Системи побудови
- CMake - основна система побудови у більшості гілок.
- Meson - доступна у гілках appMeson та libMeson.
Генерація пакетів
- DEB (Debian/Ubuntu) через CPack.
- RPM (Fedora/openSUSE та інші) через CPack.
- FreeBSD pkg через CPack (працює лише на FreeBSD).
- WIX MSI для MS Windows через CPack.
- flatpak - універсальний пакет для GNU/Linux.
- snap - універсальний пакет для GNU/Linux.
Інтеграції бібліотек
- JSON: nlohmann/json.
- Мережа: libcurl.
- XML: libxml2.
- Стиснення: zlib.
- Формати зображень: libpng, libjpeg, libwebp, giflib (GIF), libtiff (TIFF), lunasvg (SVG), OpenEXR (EXR/HDR), OpenJPEG (JPEG 2000), libavif (AVIF), libheif (HEIF/HEIC).
Якість коду, аналіз та профілювання
- Юніт-тести на базі Google Test (запуск через ctest).
- Форматування коду clang-format.
- Статичний аналіз коду cppcheck та clang-tidy.
- Перевірка використання памʼяті за допомогою Valgrind.
- Профілювання за допомогою gprof та Valgrind/Callgrind.
- Перевірки під час виконання програми (sanitizers).
CI/CD, контейнери та документація
- Збірка та запуск у контейнері Docker.
- Конвеєр Jenkins всередині Docker-контейнера.
- Генерація документації за допомогою Doxygen.
Клонування C++ проекту-шаблону
Щоб негайно розпочати реалізування нової програми склонуй поточний проект у свою локальну директорію, виконавши наступну команду в терміналі (для GNU/Linux):
git clone https://github.com/yuriysydor1991/cpp-app-template.git
або
git clone https://gitlab.com/yuriysydor1991/cpp-app-template.git
Після успішного виконання даної команди у поточній відкритій директорї повинна з'явитись нова під директорія cpp-app-template. Отож відкрий її за допомогою команди cd cpp-app-template.
Щоб одразу перейти до бажаної спеціалізації, переключись на відповідну гілку, наприклад:
git checkout appQt6
Створення форку і заміна оригінального репозиторію
Для того щоб увесь вміст проекту-шаблону скопіювати у свій чистий новостворений git-репозиторій (без жодних файлів на подобі README.md, .gitignore, LICENCE або будь-яких інших), склонуй поточний проект-шаблон cpp-app-template у свою локальну директорію і виконай заміну посилання оригінального рипозиторію на власний всередині директорії проекту-шаблону:
# Заміни наступний URL на власний з нового репозиторію
git remote set-url origin https://github.com/yuriysydor1991/cpp-app-template.git
Заміни оригінальне посилання проекту-шаблону https://github.com/yuriysydor1991/cpp-app-template.git на власний від свого новоствореного git-репозиторію.
Для того щоб перевірити чи замінився URL для проекту-шаблону (куди будуть надсилатись усі зміни) необхідно виконати наступну команду:
git remote -v
Після виконання якої у терміналі повинно висвітлитись нове посилання на новий проект.
Тепер можна скопіювати усі зміни до нового розміщення, виконуючи наступну команду:
git push
Створення форку може бути виконаним через Web-панель інтерфейсу git.
Конфігурування і побудова шаблонного проекту
Щоб дізнатись як будувати обрану гілку проекту-шаблону необхідно звернутись до корінного файлу README.md у якому детально роз'яснені команди для конфігурування проекту і його компіляції, а також спосіб вмикання кожної з вбудованих можливостей та інтеграцій. Документація поділена на окремі розділи у директорії doc/sections/ (доступні мовами en_US та uk_UA).
Також в кожному з цих README.md файлів описані вимоги до наявних інструментів і ресурсів ОС для його побудови.
Підтримай проект!
Підтримай проект за посиланням http://kytok.org.ua/page/pozertvy