Bazel中同一个目标重复构建的原因是什么?
创始人
2024-11-26 18:00:45
0

当在 Bazel 中可以利用相同的规则和源文件生成相同的输出文件时,可能会发生同一目标的重复构建。解决该问题的方法是使用 bazel query 命令,并在规则中指定生成的输出文件。比如:

cc_library(
    name = "mylib",
    srcs = ["mylib.cc"],
    hdrs = ["mylib.h"],
    deps = [":mydep"],
)

cc_binary(
    name = "mybin",
    srcs = ["mybin.cc"],
    deps = [":mylib"],
)

在这个例子中,构建 mybin 时会同时构建 mylib,因为 mylib 是 mybin 的依赖项。如果同时构建其它需要 mylib 的目标,比如 mytest,也会再次构建 mylib。为了避免重复构建,可以利用 bazel query 命令打印出需要生成的输出文件,然后在依赖规则中使用 outputs 和 out 参数。比如:

output_files("libmylib.a")

cc_library(
    name = "mylib",
    srcs = ["mylib.cc"],
    hdrs = ["mylib.h"],
    deps = [":mydep"],
    outputs = ["libmylib.a"],
)

cc_binary(
    name = "mybin",
    srcs = ["mybin.cc"],
    deps = [":mylib"],
    out = "mybin",
)

在这个例子中,mylib 的输出文件名是 libmylib.a,而 mybin 的输出文件名是 mybin。通过使用 outputs 和 out 参数,Bazel 将只构建需要的输出文件,从而避免了重复构建。

相关内容

热门资讯

五分钟了解!雀神广东麻将设置胜... 广东雀神智能插件安装使用版本解析‌,五分钟了解!雀神广东麻将设置胜率(辅助挂)果真真的有挂(新版有挂...
总算了解!手机鄂州晃晃有外挂吗... 总算了解!手机鄂州晃晃有外挂吗(辅助挂)其实是真的有挂(有挂透明挂)-哔哩哔哩,支持语音通讯、好友开...
六分钟了解!来玩德州app辅助... 六分钟了解!来玩德州app辅助软件(辅助挂)透视辅助((2021已更新))(哔哩哔哩)是一款可以让一...
玩家科普!微信雀神小程序能开挂... 广东雀神辅助器最新版版本稳定性对比与推荐‌:玩家科普!微信雀神小程序能开挂(辅助挂)竟然是真的有挂(...
科普攻略!来玩德州app有挂吗... 科普攻略!来玩德州app有挂吗!原来是真的有挂((2023已更新))(哔哩哔哩)是一款可以让一直输的...
透视黑科技!山西大唐麻将怎么调... 透视黑科技!山西大唐麻将怎么调胜率(辅助挂)的确是真的有挂(有挂教程)-哔哩哔哩关于山西大唐麻将怎么...
8分钟科普!wopoker辅助... 8分钟科普!wopoker辅助v3.0(辅助挂)软件透明挂((2025已更新))(哔哩哔哩),您好,...
科技分享!雀神辅助器苹果版(辅... 科技分享!雀神辅助器苹果版(辅助挂)确实是真的有挂(有挂总结)-哔哩哔哩;雀神辅助器苹果版是一款益智...
五分钟了解!wepoke是不是... 五分钟了解!wepoke是不是有挂!竟然真的有挂((2020已更新))(哔哩哔哩);大神普及一款德州...
透视软件!湖北麻将卡五星助赢神... 透视软件!湖北麻将卡五星助赢神器(辅助挂)的确真的有挂(真的有挂)-哔哩哔哩;湖北麻将卡五星助赢神器...