添加 JSON 文件到插件 qmake 项目

Adding JSON file to plugin qmake project

当用 Qt 编写插件库时,可以使用 Q_PLUGIN_METADATA 宏将包含一些元数据的 JSON 文件附加到它。然后将此 JSON 文件链接到库中,供以后与 QPluginLoader::metaData().

一起使用

不幸的是,在构建插件库时,关联的 JSON 文件默认情况下未被 qmake 视为库二进制文件的依赖项。当 JSON 文件被修改时,插件库项目必须手动重建(特别是重新链接)以强制修改后的 JSON 文件进入库二进制文件。

.pro文件中提及JSON文件的正确方法是什么,以便在修改时自动链接?

好吧,您可以将 JSON 文件添加到资源中:创建一些 *.qrc 文件,将您的文件添加到那里,然后在 .pro 文件中写入一些内容像 RESOURCES += plugin_data.qrc.- 还有 DISTFILES 变量,但据我所知,它仅适用于 Unix,无法解决您的问题。

我自己试过,但从未奏效,文档中的配方仍然有效:INCLUDEPATH += JSON_FILE_LOCATION_DIR。确实 qmake 有时会缓存构建,但他们说添加到包含路径应​​该可以解决问题并进行正确的构建。

我通常使用以下方法使 json 文件成为生成的包含相应代码的 moc 文件的依赖项。假设你指定Q_PLUGIN_METADATA的class位于一个名为myclass.h的头文件中,qmake代码如下:

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

注意: 如果之前定义了 OBJECTS_DIR,您可能必须使用 json_target.target = $$OBJECTS_DIR/moc_myclass.o。检查生成的 Makefile 以查看依赖项的路径是否与相应目标之一相匹配。