Как вы создаете собственные правила сборки в QTCreator для генерации кода? - PullRequest
0 голосов
/ 11 апреля 2020

Я работаю над приложением GTK3, но использую QTCreator в качестве своей IDE, просто потому, что мне это нравится. Он работает нормально, я могу легко отключить все, что указано в QT c и связать библиотеки GTK. Есть только одна маленькая проблема.

GTK использует XML файлы для определения своих ресурсов. Он поставляется с программой "glib-compile-resources", которая берет файл .gresource. xml и создает файл. c *, который затем может быть включен в ваш проект. Проблема в том, что QTCreator не знает о glib-compile-resources, поэтому я должен не забывать запускать программу вручную каждый раз, когда я вносю в них какие-либо изменения.

Я пытался использовать пользовательский шаг сборки , но если я это сделаю, то QT каждый раз перестраивает файл, даже если он не изменился, что замедляет процесс. Кроме того, если файл C еще не существует, он потерпит неудачу с сообщением «Нет правила для назначения цели« x. c », необходимой для« x.o ». Stop». ошибка, поэтому мне все равно придется запускать программу вручную.

Можно ли как-то сказать QTCreator запускать glib-compile-resources всякий раз, когда он встречает файл .gresource. xml, и включать полученный C файл в окончательную компиляцию?

* Есть и другие доступные варианты, кроме простого C исходного файла, но источник C самый простой и легкий для меня.

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Вы можете добавить пользовательскую цель в свой файл qmake (а не в конфигурацию проекта QtCreator). См. Документацию qmake по https://doc.qt.io/qt-5/qmake-advanced-usage.html#adding -custom-target и / или 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 голосов
/ 25 апреля 2020

Вот как я решил свою собственную проблему:

В документации по QT я нашел, как добавить собственный настраиваемый компилятор в файл проекта 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, который опубликовал сообщение, которое привело меня к правильному ответу.)

...