首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在非源/库文件上添加cc_binary依赖项

在非源/库文件上添加cc_binary依赖项通常是指在使用Bazel构建系统时,尝试将一个cc_binary目标(编译后的二进制文件)作为依赖项添加到一个非源代码或库文件的目标上。这在Bazel中是不直接支持的,因为cc_binary是用来生成可执行文件的,而不是作为库文件被其他目标依赖。

基础概念

  • cc_binary: Bazel中的一个构建目标,用于编译C++源代码生成可执行文件。
  • 依赖项: 在构建系统中,一个目标可能需要其他目标的输出作为输入,这种关系称为依赖项。

相关优势

通常,将cc_binary作为依赖项并不常见,因为它意味着一个可执行文件需要另一个可执行文件作为构建输入,这在逻辑上是不合理的。然而,如果你确实需要在构建过程中使用一个已编译的二进制文件,可以考虑以下替代方案:

  1. cc_library: 将需要的代码编译成库文件,然后其他目标可以依赖这个库。
  2. filegroup: 创建一个包含所需二进制文件的文件组,然后在需要的地方引用这个文件组。

类型与应用场景

  • cc_library: 适用于需要共享代码的场景,可以被多个cc_binary或其他cc_library依赖。
  • filegroup: 适用于需要引用一些非源代码文件(如配置文件、预编译的二进制文件等)的场景。

遇到的问题及原因

如果你尝试在非源/库文件上添加cc_binary依赖项,可能会遇到以下问题:

  • 构建失败: Bazel不允许直接将cc_binary作为依赖项添加到非源代码目标上。
  • 逻辑错误: 通常没有必要将一个可执行文件作为另一个目标的输入。

解决方法

如果你需要在构建过程中使用一个已编译的二进制文件,可以考虑以下解决方案:

使用cc_library

将需要的代码编译成库文件:

代码语言:txt
复制
cc_library(
    name = "my_lib",
    srcs = ["my_code.cc"],
)

然后在其他目标中依赖这个库:

代码语言:txt
复制
cc_binary(
    name = "my_binary",
    srcs = ["main.cc"],
    deps = [":my_lib"],
)

使用filegroup

创建一个包含所需二进制文件的文件组:

代码语言:txt
复制
filegroup(
    name = "my_binary_file",
    srcs = ["path/to/my_binary"],
)

然后在需要的地方引用这个文件组:

代码语言:txt
复制
genrule(
    name = "use_my_binary",
    srcs = [":my_binary_file"],
    outs = ["output.txt"],
    cmd = "$(location :my_binary_file) > $@",
    tools = [":my_binary_file"],
)

在这个例子中,genrule使用了my_binary_file中的二进制文件来生成output.txt

通过上述方法,你可以绕过直接在非源/库文件上添加cc_binary依赖项的限制,同时保持构建逻辑的清晰和正确性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券