当前位置: 首页 > 知识库问答 >
问题:

Bazel&自动生成的cpp/hpp文件

颜文昌
2023-03-14

为了重现我的问题,可以简单地使用这个最小的生成器:

-- file.sh --
#!/bin/sh
echo "int foo();" >> file.hpp
echo "#include \"myLib/file.hpp\"\n\nint foo() { return 2017; }" >> file.cpp

我的项目回购是:(工作区是一个空文件)

├── myLib
│   ├── BUILD
│   └── file.sh
└── WORKSPACE

生成文件是

genrule(
  name = "tangle_file",
  srcs = ["file.sh"],
  outs = ["file.cpp","file.hpp"],
  cmd =  "./$(location file.sh);cp file.cpp $(@D);cp file.hpp $(@D);"
)

cc_library(
    name = "file",
    srcs = ["file.cpp"],
    hdrs = ["file.hpp"],
#    deps = [":tangle_file"],
    visibility = ["//bin:__pkg__"],
)
cmd =  "./$(location file.sh);cp file.cpp $(@D);cp file.hpp $(@D);"
cmd =  "./$(location file.sh)"

声明的输出“My lib/file.cpp”不是由GenRule创建的。这可能是因为genrule实际上没有创建此输出,或者因为输出是一个目录,并且genrule是远程运行的(注意,只有声明的文件输出的内容是从远程运行的genrules复制的)

问题(B),处理cc_library()部分

我不知道如何让Bazel知道:file目标依赖于:tangle_file目标。

deps = [":tangle_file"],

共有1个答案

伏欣悦
2023-03-14

您看到的错误是因为genrule cmd没有在其输出目录中运行。如果在file.sh脚本中硬编码bazel-out/local-fastbuild/genfiles/mylib/file.cpp,而不是file.cpp,它就可以工作了。但是,推荐的方法是脚本将其输出目录作为参数。

例如,

genrule(
  name = "tangle_file",
  srcs = ["file.sh"],
  outs = ["file.cpp","file.hpp"],
  cmd =  "./$(location file.sh) $(@D)"
)

#!/bin/sh
echo "int foo();" >> $1/file.hpp
echo "#include \"myLib/file.hpp\"\n\nint foo() { return 2017; }" >> $1/file.cpp
srcs = ["file.cpp"],
hdrs = ["file.hpp"],
srcs = ["//myLib:file.cpp"],
hdrs = ["//myLib:file.hpp"],
 类似资料:
  • An expert is someone who is one page ahead of you in the manual. — David Knight 像大多数工程师一样,我从来没有阅读过手册,除非或者直到产品实际出现了十万火急的情况。 然而,随着你的配置清单代码不断增多且越来越复杂,使用 Puppet 的自动文档工具 puppet doc 为你的节点(node)和类(class)生成 H

  • 问题内容: 有人知道如何从1开始生成,以便下一个对象具有2,依此类推吗? 我尝试了以下方法,但不起作用: 问题答案: 您需要一个 静态的 类成员来跟踪上次使用的索引。确保还实现一个复制构造函数: 更新: 正如@JordanWhite建议的那样,您可能希望使static计数器成为 atomic ,这意味着可以安全地同时使用(即一次在多个线程中使用)。为此,将类型更改为: 增量读取和复位操作变为:

  • 安装配置KnpSnappyBundle扩展 先安装扩展,执行: composer require knplabs/knp-snappy-bundle 再安装wkhtmltopdf工具 wget http://download.gna.org/wkhtmltopdf/0.12/0.12.3/wkhtmltox-0.12.3_linux-generic-amd64.tar.xz xz -d wkh

  • 我正在开发一个Spring Boot应用程序的后端,该应用程序使用OpenAPI和Swagger通过模式为前端应用程序提供接口。yml文件。当对控制器进行更改时,我们使用swagger ui获取api文档JSON,使用在线swagger编辑器将其转换为yaml,并将结果粘贴到模式中。yml文件 现在,我想让它自动化,这样我们就可以调用一个maven任务来自动生成yaml文件,但我找不到任何mave

  • 在您重定向到Realex输入详细信息之前,引用网址应该是您网站上的最后一页吗?如果是这样,那么如果你有动态网址呢?

  • 本文向大家介绍SpringBoot+Swagger-ui自动生成API文档,包括了SpringBoot+Swagger-ui自动生成API文档的使用技巧和注意事项,需要的朋友参考一下 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染、先后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远。 这样后段开发好了api 之后就要提交api 文档给前端的朋友。给前端的a