You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bazel中避免cc_binary目标重复定义,实现32/64位版本命名?

解决方案:使用Bazel宏封装重复的cc_binary定义

你可以通过定义Bazel宏来封装重复的cc_binary配置,只需要编写一次模板代码,就能生成两个不同名称的目标,同时解决pdb文件匹配的问题。

步骤1:定义宏

在BUILD文件中添加一个宏函数,将重复的cc_binary参数封装进去:

def myapp_cc_binary(name, **kwargs):
    cc_binary(
        name = name,
        srcs = MYAPP_SRCS,
        copts = MYAPP_COPTS,
        deps = MYAPP_DEPS,
        **kwargs  # 允许传入额外参数,应对32/64位的差异化配置
    )

步骤2:调用宏生成目标

直接调用宏生成32位和64位的目标即可,无需重复编写完整的cc_binary配置:

myapp_cc_binary(name = "myapp32")
myapp_cc_binary(name = "myapp64")

扩展:处理32/64位的差异化配置

如果32位和64位需要不同的编译选项(比如-m32/-m64),可以在宏中添加参数支持:

def myapp_cc_binary(name, extra_copts = [], **kwargs):
    cc_binary(
        name = name,
        srcs = MYAPP_SRCS,
        copts = MYAPP_COPTS + extra_copts,
        deps = MYAPP_DEPS,
        **kwargs
    )

# 针对不同架构传入额外编译选项
myapp_cc_binary(name = "myapp32", extra_copts = ["-m32"])
myapp_cc_binary(name = "myapp64", extra_copts = ["-m64"])

为什么这个方案可行?

  • 宏会在BUILD文件加载时展开为两个独立的cc_binary目标,每个目标生成的二进制文件和pdb文件(如myapp32.pdb、myapp64.pdb)名称完全匹配,调试器可以正常识别,交付时放在同一目录也不会冲突。
  • 彻底避免了代码重复,后续修改配置只需要更新宏的定义即可,无需修改两个目标。

内容的提问来源于stack exchange,提问作者Calmarius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:10:54