使用 Bazel 编译 QT 应用程序时访问资源

accessing recources when compiling QT application with Bazel

本文关键字:访问 资源 应用程序 QT Bazel 编译 使用      更新时间:2023-10-16

我正在使用Bazel编译一个Qt应用程序(https://github.com/bbreslauer/qt-bazel-example(,该应用程序使用qrc文件中定义的着色器。 当我尝试访问资源文件时,它不可用(因为我没有将 qrc 文件连接到编译(。 如何在构建中定义 qrc 文件内容?

更新

根据@ypnos的响应,我正在尝试向我的qt.bzl文件添加一个宏。我希望宏接收文件列表作为参数,创建(临时(qrc 文件,然后运行 rcc 命令。 我目前正在为以下问题而苦苦挣扎:

  1. 在 bzl 文件中运行 python 脚本并不像我那么简单。它无法生成文件("打开"未定义(。可能吗?如果是,如何(见下面的示例(
  2. 即使使用给定的 qrc 文件,我也无法让命令工作,我想我在命令行参数上做错了什么,但我找不到参考/手册

这就是我到目前为止得到的(我的qt.bzl文件(

...

def qt_resource(name,file_list, **kwargs):
## following doesnt work inside the bzl file:
# fid = open('%s.qrc' % name, 'w')
# fid.write("<RCC>n")
# fid.write("t<qresource prefix="/%s">n" % name)
# for x in file_list:
#   fid.write("tt<file>%s</file>n" % x)
# fid.write("t</qresource>n")
# fid.write("</RCC>n")
# fid.close()
native.genrule(
name = "%s_res" % name,
outs = ["rcc_%s.cpp" % name],
cmd =  "rcc %s.qrc -o $@/rcc_%s.cpp"%(name,name) ,
)
srcs = [":rcc_%s.cpp" % name]
native.cc_library(
name = name,
srcs = srcs,
hdrs = [],
deps = [],
**kwargs
)

您正在使用的 bazel 示例似乎不支持 qrc(它只支持 moc 和 ui 文件(。

QRC 文件需要使用rcc转换为C++源,然后进行编译.2 该概念类似于转换为标头的 .ui 文件之一。

也许您可以修补qt.bzl以添加该功能。