您如何在QTCreator中创建自定义构建规则以生成代码?

问题描述 投票:0回答:2

我正在开发GTK3应用程序,但是使用QTCreator作为我的IDE,只是因为我碰巧喜欢它。它工作正常,我可以轻松关闭所有特定于QT的内容并链接GTK库。只有一个小问题。

GTK使用XML文件定义其资源。它带有一个程序“ glib-compile-resources”,该程序使用一个.gresource.xml文件并生成一个.c文件*,然后可以将其包含在您的项目中。问题是QTCreator不了解glib-compile-resources,因此我必须记住每次对它们进行任何更改时都要手动运行该程序。

我已经尝试过使用自定义生成步骤,但是如果执行此操作,则QT会每次都重建文件,即使它没有更改,也会减慢该过程。另外,如果C文件尚不存在,它将失败,并显示“没有规则使目标x.o所需的目标x.c停止。”。错误,因此无论如何我都必须手动运行该程序。

有什么方法告诉QTCreator在遇到.gresource.xml文件时运行glib-compile-resources,并将生成的C文件包括到最终编译中?

*还有其他可用选项,而不仅仅是一个直接的C源文件,但是C源对我来说是最简单和最容易的。

qt-creator
2个回答
1
投票

您可以在qmake文件中(而不是QtCreator项目配置中)添加自定义目标。请参阅qmake文档,位于https://doc.qt.io/qt-5/qmake-advanced-usage.html#adding-custom-targets和/或https://doc.qt.io/qt-5/qmake-advanced-usage.html#adding-compilers

更新:这是一个简单的示例,显示了如何使用.pro文件中的自定义目标机制对单个文件执行此操作:

glib_resources.target = glib-resources.c
glib_resources.depends = glib-resources.xml
glib_resources.commands = glib-compile-resources --target  $$glib_resources.target --generate-source $$glib_resources.depends


QMAKE_EXTRA_TARGETS += glib_resources 
PRE_TARGETDEPS += glib-resources.c ## set this target as a dependency for the actual build
QMAKE_CLEAN += glib-resources.c  ## delete the file at make clean

0
投票

这是我如何解决自己的问题:

我在QT文档中找到了如何add your own custom compiler到QT项目文件。所需的确切行是:

GLIB_RESOURCE_FILES += \
    resources.gresource.xml
    # Add more resource files here.

glib_resources.name = glibresources
glib_resources.input = GLIB_RESOURCE_FILES
glib_resources.output = ${QMAKE_FILE_IN_BASE}.c
glib_resources.depend_command = glib-compile-resources --generate-dependencies ${QMAKE_FILE_IN}
glib_resources.commands = glib-compile-resources --target ${QMAKE_FILE_OUT} --sourcedir ${QMAKE_FILE_IN_PATH} --generate-source ${QMAKE_FILE_IN}
glib_resources.variable_out = SOURCES
glib_resources.clean = ${QMAKE_FILE_OUT}

QMAKE_EXTRA_COMPILERS += glib_resources

(感谢@zgyarmati,他的帖子使我找到了正确的答案。)

© www.soinside.com 2019 - 2024. All rights reserved.