создать файл ресурсов QT с помощью Bazel - PullRequest
1 голос
/ 04 февраля 2020

Я пытаюсь создать файл ресурсов Qt, используя Bazel. Я создал макрос, который получает список файлов и вызывает функцию Qt rcc для генерации соответствующего файла cpp. Для этого мне сначала нужно сгенерировать файл qr c (xml) с соответствующим списком - поэтому я создал двоичный файл python, который делает именно это (generate_qrc). Я в настоящее время сталкиваюсь с парой вопросов:

  1. это лучший способ сделать это? Google не привел ни одного полезного варианта использования, но я уверен, что я не первый
  2. По какой-то причине исполняемый файл python не найден, нужно ли мне определять его, кроме добавления в tools? Я попытался добавить $(location ...), но я получил expression is not a declared prerequisite of this rule
  3. Как я могу выполнить две команды (мою python двоичную + rcc) одну за другой? {}?

Спасибо!

qt.bzl:



def qt_resource(name,file_list, **kwargs):

  native.genrule(
      name = "%s_resource" % name,
      srcs=["%s.qrc"%name]+file_list,
      outs = ["rcc_%s.cpp" % name],
      # cmd =  "rcc %s/%s.qrc -o $@"%(native.package_name(),name) ,
      cmd="generate_qrc file_list.qrc %s"%','.join(file_list),
      tools=["//third_party:generate_qrc"]
  )
  srcs = [":rcc_%s.cpp" % name]


  native.cc_library(
      name = name,
      srcs = srcs,
      hdrs = [],
      deps = [],
      **kwargs
  )

1 Ответ

2 голосов
/ 04 февраля 2020
  1. Выглядит как разумный подход для меня

  2. Попробуйте $(location //third_party:generate_qrc) в cmd

  3. rcc можно запустить в другом genrule, где outs первого жанра ("%s_resource" % name) можно поместить в srcs следующего. Также возможно создать sh_binary и сценарий оболочки, который выполняет всю работу, и запустить этот sh_binary в genrule. Все зависит от того, насколько сложными становятся вещи и что для вас лучше.

...