Jed*_*edi 3 build cmake nanomsg bazel tensorflow
我在TensorFlow的私人分支上编写了一个使用nanomsg的模块.
对于我的本地开发服务器,我曾经cmake install
安装nanomsg(to /usr/local
)并从其安装位置访问头文件.该项目在当地运行良好.
但是,我现在需要在我的TensorFlow工作区中打包nanomsg.我尝试了以下两种方法,但都没有找到令人满意的方法:
与OpenCV的这个答案类似,我将nanomsg预编译到一个私有存储库中,tensorflow/workspace.bzl
使用http_archive指令将其加载到我的工作区(内部)中,然后在相关的构建脚本中包含头文件和库.运行良好,但不是便携式解决方案.
一个更便携的解决方案,我创建了一个genrule
运行特定序列的cmake
命令,可用于构建nanomsg.这种方法比较简洁,但genrule
不能重复用于cmake
其他项目.(我提到了这个讨论).
显然,cmake
作为Bazel构建中的一等公民,不支持.是否有人在您自己的项目中遇到过这个问题,创建了一个通用的,可移植的方式来在使用的Bazel项目中包含库cmake
?如果是这样,你是怎么做到的?
小智 6
正如Ulf所写,我认为您建议的选项2应该可以正常工作.
关于"我可以识别cmake是否失败",是的:当cmake失败时,应该返回错误退出代码(!= 0).这反过来将导致Bazel自动将genrule动作识别为失败,从而使构建失败.因为Bazel在运行命令之前设置了"set -e -o pipefail"(参见https://docs.bazel.build/versions/master/be/general.html#genrule-environment),所以如果你链接它也应该工作您的genrule"cmd"中的多个cmake命令.
如果您调用"cmd"属性中的shell脚本然后实际运行cmake命令,请确保将"set -e -o pipefail"放在脚本的第一行.否则,当cmake失败时,脚本不会失败.
如果我误解了你的问题"我可以确定cmake是否失败",请告诉我.:)
归档时间: |
|
查看次数: |
1441 次 |
最近记录: |