Согласно оффициальному сайту "QCustomPlot - это виджет Qt для построения графиков и визуализации данных". Репозиторий gitlab.

эпюра крутящих моментов скорее всего
эпюра крутящих моментов скорее всего

Библиотека существует с 2013 и хорошо документирована. Радует наличие примеров. Не имеет зависимостей, кроме самого Qt, что облегчает жизньперенос на другие платформы/кросс-компиляцию. Текущая ревизия 2.1.1 поддерживает qt 6.4.

В институтcкие времена активно использовал для написания всевозможных сопромат-демок, что были у нас в качестве домашек и, так же активно, подсаживал на сабж сокурсников. После штатного, для того вуза delphi с его windows forms, qcp казался маной небесной.

игры с тервером
игры с тервером

Либа хороша. Единственное НО - нет интеграции в систему сборки cmake, ну или мне не удалось найти готовых. В архивах с официального сайта лежат qmake скрипты, а github наполнен демками.
Посидев с вечер, хочу поделится своими мыслями, как можно быстро подключить сие к своему cmake проекту стандартными средствами, не скачивая ручками исходников и используя пару строчек в скрипте cmake.

Cmake позволяет делать некоторые вещи во время конфигурации: ходить по url, в remote repo, распаковывать, собирать. Этим занимается FetchContent. Хрестоматийный пример предлагает воспользоваться конструкцией, где мы декларируем ресурс:

FetchContent_Declare(qcustomplot
  URL https://www.qcustomplot.com/release/2.1.1/QCustomPlot-source.tar.gz
)

Затем делаем его доступным:

FetchContent_MakeAvailable(qcustomplot)

Эта пара команд позволит скачать и распаковать исходники. Далее FetchContent попытается найти корневой CMakeLists.txt и, если он есть, выполняет add_submodule(some_extra_dir).

В каком случае не нужно вызывать FetchContent_MakeAvailable явно?

На той же странице документации описан механизм Integrating With find_package.
Он делает задекларированный ресурс видимым для find_package. Иначе говоря, если find_package(target) не обнаружил target в CMAKE_PREFIX_PATH и прочих, он обратится к FetchContent_MakeAvailable.

QCustomPlot не имеет коренового cmake list. Соответсвенно, импортировать цель библиотеки не получится. Напишем тривиальный add_library:

add_library(qcustomplot
  "${qcustomplot_SOURCE_DIR}/qcustomplot.h"
  "${qcustomplot_SOURCE_DIR}/qcustomplot.cpp"
)

qcustomplot_SOURCE_DIR определит для нас MakeAvailable.
Порядок команд видится мне согласным появления в статье. Подкрепляет догадку пример из документации о Complex Dependency Hierarchies где происходит копирование некоего someFile.c перед явным вызовом add_subdirectory.

Готовый для использования вами репо лежит по ссылке.
Пример использование через стандартный target_link_libraries:

target_link_libraries(<you_target>
  ...
  qcustomplot
)

Комментарии (5)


  1. Xadok
    05.11.2023 00:17

    Там ещё автор интересный очень. Все просьбы о смаке упорно игнорирует, как и сообщения на почту с патчами.


  1. uEvg
    05.11.2023 00:17
    +2

    Очень интересно почитать про такие мощные инструменты, которые предоставляет современный CMake.

    Действительно CMake уже стал негласным стандартом для С++, и лично мне кажется что каждая С++ библиотека, фреймворк в 2023 году уже точно должны иметь CMakeList в своем репозитории.

    Спасибо автору, за доступный контент. Предлагаю добавить в список хабов статьи, "Системы сборки*".


    1. Fails
      05.11.2023 00:17
      +1

      Добрый вечер, рекомендую глянуть страничку от автора библиотеки CLI11: https://cliutils.gitlab.io/modern-cmake/

      Очень неплохое введение в современные фичи CMake


  1. Fails
    05.11.2023 00:17

    Благодарю за статью! Давно знаю эту библиотеку, и рекомендую для различных библиотек попробовать, наверное, использовать пакетный менеджер Conan, в его центре пакетов она доступна, и там есть CMake-интеграция: https://conan.io/center/recipes/qcustomplot?version=2.1.1

    Также он есть в vcpkg - ещё одном пакетнике для C++ (не могу кинуть прямую ссылку на страничку библиотеки, но можно тут поискать: https://vcpkg.io/en/packages.html)

    К сожалению, для рабочих проектов ее не получалось брать из-за лицензии GPL-3.0..


  1. HemulGM
    05.11.2023 00:17

    После штатного, для того вуза delphi с его windows forms, qcp казался маной небесной.

    Опустим момент, что в Delphi не WinForms. А в чем именно были проблемы? И в чем тут преимущество "QCustomPlot"?