我们希望将应用程序的 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 位配置构建,这为我们提供了可执行文件。
是否可以以某种方式避免这种重复?
我尝试过:
我认为这不是 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 位。