如何在 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 的目录)
谢谢!
在您的工作区中查找 bazel-bin
和 bazel-genfiles
目录。这些实际上是 Bazel 在每次构建后更新的连接(目录符号链接)。如果你 bazel build //:demo
,你可以访问它的输出 bazel-bin\demo
.
(a) 您还可以在您的环境中设置 TMP
和 TEMP
以指向例如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
部分。
是的,我认为您需要将这些文件放在 pkg_tar.srcs
中。是否使用 filegroup()
规则无关紧要;文件组只是让你把文件分组在一起,所以你可以通过名称来引用组,当你需要在多个规则中引用相同的文件时,这很有用。
2.a。我不这么认为。
请在此处查看我存储库中的 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 的目录)
谢谢!
在您的工作区中查找
bazel-bin
和bazel-genfiles
目录。这些实际上是 Bazel 在每次构建后更新的连接(目录符号链接)。如果你bazel build //:demo
,你可以访问它的输出bazel-bin\demo
.(a) 您还可以在您的环境中设置
TMP
和TEMP
以指向例如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
部分。是的,我认为您需要将这些文件放在
pkg_tar.srcs
中。是否使用filegroup()
规则无关紧要;文件组只是让你把文件分组在一起,所以你可以通过名称来引用组,当你需要在多个规则中引用相同的文件时,这很有用。2.a。我不这么认为。