Обновление
Чтобы скопировать файл данных в тот же каталог, что и двоичный файл, вы можете использовать genrule:
genrule(
name = "copy",
srcs = ["ui/Front_end.ui"],
outs = ["Front_end.ui"],
output_to_bindir = 1,
cmd = "cp $< $@",
)
Поскольку существует только один srcs
и один outs
введите, вы можете использовать $<
и $@
соответственно.
(В противном случае вам придется использовать выражения $(location ...)
. Bazel заменяет их фактическим путем к файлам, каким бы ни был этот путьвремя сборки.)
Вам необходимо использовать библиотеку C ++ runfiles .Документация находится в исходном файле.
После инициализации std::unique_ptr<Runfiles> runfiles
вы можете посмотреть путь к файлу времени выполнения следующим образом:
std::string path = runfiles->Rlocation("my_workspace/my_package_path/ui/Front_end.ui");
Вы должны заменить my_workspace
наимя вашего рабочего пространства и my_package_path
с указанием пути пакета двоичного файла.
Имя рабочего пространства
Если, например, файл WORKSPACE
содержит workspace(name = "foo")
, тогда my_workspace
должно бытьfoo
.Если в файле WORKSPACE
такого правила нет, используйте имя рабочего пространства по умолчанию: __main__
.
Путь к пакету
Это относительный путь к рабочему пространству к файлу BUILDгде вы определили cc_binary, например, "app / BUILD" в вашем примере.Так что my_package_path
должно быть просто app
.