首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Bazel项目中构建CMake库

问在Bazel项目中构建CMake库
EN

Stack Overflow用户
提问于 2017-09-10 23:25:13
回答 2查看 6K关注 0票数 7

我在TensorFlow的私有分叉上编写了一个使用奈米的模块。

对于本地开发服务器,我使用cmake install安装nanomsg (到/usr/local),并从它们安装的位置访问头文件。这个项目在当地进行得很好。

但是,我现在需要在我的TensorFlow工作区中打包nanomsg。我尝试了以下两种方法,但都不满意:

  1. 类似于这个答案 for OpenCV,我预编译了nanomsg到私有存储库中,使用档案指令将其加载到工作区中(在tensorflow/workspace.bzl中),然后在相关的构建脚本中包含头部和库。这运行良好,但不是一个可移植的解决方案。
  2. 一个更可移植的解决方案是,我创建了一个genrule来运行一个特定的cmake命令序列,这些命令可以用来构建nanomsg。这种方法更简洁,但是不能将genrule重用到cmake其他项目。(我指的是这一讨论)。

显然,在builds中,cmake作为一流的公民是不受支持的。是否有人在您自己的项目中遇到过这个问题,创建了一种通用的、可移植的方法来在使用cmake构建的Bazel项目中包含库?如果是的话,你是如何处理的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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是否失败”,请告诉我。:)

票数 6
EN

Stack Overflow用户

发布于 2019-04-26 03:58:21

这个新项目:抄送似乎是一个解决方案(它为cmake构建规则以在bazel中构建您的项目)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46146441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档