在 Bazel 中有条件地命名 cc_binary 目标

问题描述 投票:0回答:1

我们希望将应用程序的 32 位版本称为“myapp32”,将 64 位版本称为“myapp64”,并且在发布时将它们放在同一目录中。

目前我有两个相同的目标,唯一的区别是名称,它们看起来有点像这样:

cc_binary(
    name = "myapp32",
    srcs = MYAPP_SRCS,
    copts = MYAPP_COPTS,
    deps = MYAPP_DEPS
)

cc_binary(
    name = "myapp64",
    srcs = MYAPP_SRCS,
    copts = MYAPP_COPTS,
    deps = MYAPP_DEPS
)

然后另一条规则使用 select() 有条件地选择适当的规则来构建它。

在构建过程中,程序先使用 32 位配置构建,然后使用 64 位配置构建,这为我们提供了可执行文件。

是否可以以某种方式避免这种重复?

我尝试过:

  • 名称中使用 select(),但 Bazel 不接受。它只接受字符串作为名称。
  • 事后重命名可执行文件。但随后调试器将查找文件名未更改的 .pdb 文件。所以我们不能将两个 .pdb 放入同一目录(相同的名称)。
bazel
1个回答
0
投票

我认为这不是 bazel 的做法 你应该只写一条规则

cc_binary(
name = "myapp32",
srcs = MYAPP_SRCS,
copts = MYAPP_COPTS,
deps = MYAPP_DEPS
)

并且您应该更多地使用配置选项,这意味着在 WORKSPACE 文件中的根 bazel 文件夹中,您将在

.bazelrc

中定义两个构建选项
build: --copt="-Werror"
build:target_32bits  --cpu=x86_32
build:target_64bits  --cpu=x86_64

您会在不同的输出中找到二进制文件:

32 位在

bazel-out/target_32bits-opt/bin

64 位

bazel-out/target_64bits-opt/bin

也许您还需要声明一个 bazel 工具链,以便为每个各自的目标使用 gcc 32 位和 gcc 64 位。

© www.soinside.com 2019 - 2024. All rights reserved.