我在TensorFlow的私有分叉上编写了一个使用奈米的模块。
对于本地开发服务器,我使用cmake install安装nanomsg (到/usr/local),并从它们安装的位置访问头文件。这个项目在当地进行得很好。
但是,我现在需要在我的TensorFlow工作区中打包nanomsg。我尝试了以下两种方法,但都不满意:
tensorflow/workspace.bzl中),然后在相关的构建脚本中包含头部和库。这运行良好,但不是一个可移植的解决方案。genrule来运行一个特定的cmake命令序列,这些命令可以用来构建nanomsg。这种方法更简洁,但是不能将genrule重用到cmake其他项目。(我指的是这一讨论)。显然,在builds中,cmake作为一流的公民是不受支持的。是否有人在您自己的项目中遇到过这个问题,创建了一种通用的、可移植的方法来在使用cmake构建的Bazel项目中包含库?如果是的话,你是如何处理的?
发布于 2017-09-12 14:45:20
正如Ulf所写的,我认为您建议的备选方案2应该工作得很好。
关于“我能否识别cmake是否失败”,是的: cmake在失败时应该带一个错误退出代码(!= 0)返回。这反过来将导致Bazel自动识别泛型操作为“失败”,从而导致生成失败。因为Bazel在运行命令(cf )之前设置了"set -e -o pipefail“(Cf)。( https://docs.bazel.build/versions/master/be/general.html#genrule-environment),如果您将多个cmake命令链接到您的泛型规则"cmd“中,它也会工作。
如果您在"cmd“属性中调用一个shell脚本,然后实际运行cmake命令,那么请确保自己将"set -e -o pipefail”放在脚本的第一行。否则,当cmake失败时,脚本不会失败。
如果我误解了你的问题:“我能确定cmake是否失败”,请告诉我。:)
发布于 2019-04-26 03:58:21
这个新项目:抄送似乎是一个解决方案(它为cmake构建规则以在bazel中构建您的项目)。
https://stackoverflow.com/questions/46146441
复制相似问题