Я пытаюсь создать приложение C ++ с помощью Bazel, для которого во время выполнения требуется несколько файлов. Я использую атрибут data
правила сборки, чтобы включить эти файлы в цель сборки:
cc_binary(
name = "myapp",
srcs = [
"main.cpp",
],
data = glob([ "media/**" ], exclude = [ "media/BUILD", "media/.keep" ]),
)
Проблема в том, что Bazel помещает файлы выполнения по странному пути, в каталог, зависящий от системы сборки (<build target name>.runfiles/__main__/<build target name>/
).
Есть ли какой-либо разумный (или гибкий, если хотите) способ ссылаться на файлы запуска, кроме жесткого кодирования этих путей, как этот
// "myapp" is the build target name
FILE* f = fopen("myapp/myapp.runfiles/__main__/myapp/media/file.txt", "r");
или чтение путей из манифеста (что все же не лучший вариант, поскольку каждый файл имеет префикс __main__/<build target name>/
)?