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

时间:2018-02-04 04:43:38

标签: bazel

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

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

1-在我的机器中,该文件正在此目录中生成:

  

C:\用户\约翰\应用程序数据\本地\ Temp_bazel_John \ aS4O8v3V \ execroot__main __ \巴泽勒出\ x64_windows-的FastBuild \ BIN \演示

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

  1. 在工作区中查找if( url.indexOf('//') < 0 ) { url = 'http://' + url; } bazel-bin目录。这些实际上是Bazel在每次构建后更新的联结(目录符号链接)。如果您bazel-genfiles,则可以bazel build //:demo访问其输出。

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

    (b)或者您可以传递--output_user_root启动标记,例如c:\tmp\aS4O8v3V\execroot\__main__\bazel-out\x64_windows-fastbuild\bin。这与(a)具有相同的效果。

    目前无法摆脱路径的bazel--output_user_root=c:\tmp build //:demo部分。

  2. 是的,我认为您需要将这些文件放在_bazel_John\aS4O8v3V\execroot中。您是否使用pkg_tar.srcs规则无关紧要; filegroup只允许您将文件组合在一起,因此您可以按名称引用该组,这在您需要在多个规则中引用相同文件时非常有用。

    2.A。我不这么认为。