Добавление файла JSON в плагин проекта qmake - PullRequest
0 голосов
/ 26 декабря 2018

При написании библиотек подключаемых модулей с помощью Qt можно прикрепить к нему файл JSON, содержащий некоторые метаданные, с помощью макроса Q_PLUGIN_METADATA.Этот JSON-файл затем связывается с библиотекой для последующего использования с QPluginLoader::metaData().

К сожалению, при сборке библиотеки плагинов связанный JSON-файл по умолчанию не рассматривается как зависимость для двоичного файла библиотеки при qmake,При изменении файла JSON проект библиотеки плагинов необходимо перестроить (особенно повторно связать) вручную, чтобы принудительно преобразовать измененный файл JSON в двоичный файл библиотеки.

Как правильно упомянуть файл JSON вфайл .pro, чтобы он автоматически связывался при его изменении?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Обычно я использую следующее, чтобы сделать json-файл зависимостью от сгенерированного moc-файла, который содержит соответствующий код.Предполагая, что класс, в котором вы указываете Q_PLUGIN_METADATA, находится в заголовочном файле с именем myclass.h, код qmake выглядит следующим образом:

DISTFILES += myclass.json
json_target.target = moc_myclass.o
json_target.depends += $$PWD/myclass.json
QMAKE_EXTRA_TARGETS += json_target

Примечание: Возможно, вам придется использовать json_target.target = $$OBJECTS_DIR/moc_myclass.o вместо этого, если OBJECTS_DIR был ранее определен.Проверьте сгенерированный Makefile, чтобы увидеть, соответствует ли путь зависимости пути соответствующего целевого объекта.

0 голосов
/ 26 декабря 2018

Ну, вы можете просто добавить файл JSON к ресурсам: создать какой-нибудь файл *.qrc, добавить туда свой, а затем записать в файл .pro что-то вроде RESOURCES += plugin_data.qrc .- Также есть DISTFILESпеременная, но AFAIK это только для Unix и не решает вашу проблему.

Попробовал себя, и это никогда не работало, все еще рецепт из документации работает: INCLUDEPATH += JSON_FILE_LOCATION_DIR.Это правда, что qmake кеширует сборки иногда, но говорят, что добавление пути включения должно сработать и сделать правильную сборку.

...