QCustomPlot + FetchContent
Согласно оффициальному сайту «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(
...
qcustomplot
)