如何在 Windows 中使用 Bazel 的 pkg_tar() 查找和部署正确的文件?

how to find and deploy the correct files with Bazel's pkg_tar() in Windows?

请在此处查看我存储库中的 bin-win 目标: https://github.com/thinlizzy/bazelexample/blob/master/demo/BUILD#L28

它似乎正确地将可执行文件打包到一个名为 bin-win.tar.gz 的文件中,但我还有一些问题:

1- 在我的机器上,文件正在这个目录中生成:

C:\Users\John\AppData\Local\Temp_bazel_John\aS4O8v3V\execroot__main__\bazel-out\x64_windows-fastbuild\bin\demo

这使得查找 tar.gz 文件成为一项繁琐的任务。 问题是如何使我的 bin-win 目标将文件从那里移动到 "better location"? (可能由环境变量或 cmd 行定义 parameter/flag)

2- 如何在我的可执行文件中包含更多文件?我的实际用例是我想提供数据文件和一些 DLL 以及可执行文件。我是否应该使用 filegroup() 规则并在 "srcs" 属性中引用它的名称?

2a- 对于 DLL,有没有办法制定 filegroup() 规则来解释环境变量? (例如:DLL 的目录)

谢谢!

  1. 在您的工作区中查找 bazel-binbazel-genfiles 目录。这些实际上是 Bazel 在每次构建后更新的连接(目录符号链接)。如果你 bazel build //:demo,你可以访问它的输出 bazel-bin\demo.

    (a) 您还可以在您的环境中设置 TMPTEMP 以指向例如c:\tmp。 Bazel 将选择那些而不是 C:\Users\John\AppData\Local\Temp,因此输出目录(bazel-bin 指向)的完整路径将是 c:\tmp\aS4O8v3V\execroot\__main__\bazel-out\x64_windows-fastbuild\bin.

    (b) 或者您可以传递 --output_user_root 启动标志,例如bazel--output_user_root=c:\tmp build //:demo。这将与 (a) 具有相同的效果。

    目前无法删除路径的 _bazel_John\aS4O8v3V\execroot 部分。

  2. 是的,我认为您需要将这些文件放在 pkg_tar.srcs 中。是否使用 filegroup() 规则无关紧要;文件组只是让你把文件分组在一起,所以你可以通过名称来引用组,当你需要在多个规则中引用相同的文件时,这很有用。

    2.a。我不这么认为。