Согласно оффициальному сайту "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)
uEvg
05.11.2023 00:17+2Очень интересно почитать про такие мощные инструменты, которые предоставляет современный CMake.
Действительно CMake уже стал негласным стандартом для С++, и лично мне кажется что каждая С++ библиотека, фреймворк в 2023 году уже точно должны иметь CMakeList в своем репозитории.
Спасибо автору, за доступный контент. Предлагаю добавить в список хабов статьи, "Системы сборки*".
Fails
05.11.2023 00:17+1Добрый вечер, рекомендую глянуть страничку от автора библиотеки CLI11: https://cliutils.gitlab.io/modern-cmake/
Очень неплохое введение в современные фичи CMake
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..
HemulGM
05.11.2023 00:17После штатного, для того вуза delphi с его windows forms, qcp казался маной небесной.
Опустим момент, что в Delphi не WinForms. А в чем именно были проблемы? И в чем тут преимущество "QCustomPlot"?
Xadok
Там ещё автор интересный очень. Все просьбы о смаке упорно игнорирует, как и сообщения на почту с патчами.