Твій охайний шаблон для 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) з опціональною підтримкою CMake find_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:

Вбудовані можливості та інтеграції

Окрім спеціалізованих гілок, проект-шаблон містить набір вбудованих, вмиканих за потреби (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