在' bazel build'期间,什么时候`target.runfiles`目录正确设置?

时间:2018-01-09 23:47:12

标签: bazel

对于cc_binary(或py_binary,sh_binary),bazel何时创建其runfiles目录并正确设置所有符号链接?

  • 是在构建cc_binary之后,还是在将此cc_binary作为输入的任何规则之前创建的,或者
  • 是否在完成所有目标的整个构建过程后创建了它?

我尝试编写自定义规则,将cc_binary的runfiles目录中的内容打包到tarball中。此自定义规则将cc_binary及其运行文件中的所有目标作为输入。如果在构建cc_binary之后正确设置了runfiles目录,那么我只需要直接打包该目录。如果没有,我可能需要在我的自定义规则中自己设置一个tmp runfiles目录。

此外,这种行为是否可以保留在将来的版本中?

非常感谢!

1 个答案:

答案 0 :(得分:2)

Bazel不保证任何订购;所有它保证的是,在构建结束时,二进制文件和runfiles树都应该在那里。

如果您希望在构建这两个操作后执行操作,则需要依赖二进制文件及其runfiles manifest。但是,这并不能保证运行文件树将在包装操作规则的沙箱中。

认为它可能会制作@Override protected Void doInBackground(String... strings) { String JSPN_Request = ""; String response = ""; URL url = null; JSONObject jsonObject = null; HttpURLConnection conn = null; OutputStream outputStream = null; OutputStreamWriter outputStreamWriter = null; BufferedWriter bufferedWriter = null; try { url = new URL(strings[0]); jsonObject = new JSONObject(); jsonObject.put("userId",102); jsonObject.put("id",102); jsonObject.put("title","hello world"); jsonObject.put("body","hello world"); conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); OutputStream os = conn.getOutputStream(); outputStreamWriter = new OutputStreamWriter(os); bufferedWriter = new BufferedWriter(outputStreamWriter); bufferedWriter.write(jsonObject.toString()); bufferedWriter.flush(); bufferedWriter.close(); outputStream.close(); conn.setDoInput(true); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuilder sb = new StringBuilder(); String line = null; while((line = reader.readLine()) != null) { sb.append(line); break; } reader.close(); response = sb.toString().toString(); }catch (Exception e) { Log.d(TAG, "----------------------------------json-error----------------------------------"); Log.d(TAG, "POSTING ERROR" + e); Log.d(TAG, "----------------------------------json-error----------------------------------"); }} ctx.actions.run(input_manifests=)这样做的东西,尽管它目前非常神秘。 / p>