我是bazel的新手,在用bazel构建我的CPP代码时,我面临着下面的问题。
我希望将当前日期传递为以下格式的本地定义之一。
日期=<获取当前日期的规则>
cc_lib( .,local_define = "xyz = 28-11-2022",)
每次运行bazel构建时,我如何获得当前的日期?local_define = "xyz = date",
我试着加载python日期,但starlark不支持它。
发布于 2022-11-28 21:45:25
bazel在构建中处理非确定性信息的通常方法是使用"build标记“,在这里描述:
https://bazel.build/docs/user-manual#workspace-status
Bazel竭尽全力避免不确定性,因为它不利于缓存,因此向构建中添加类似当前时间的内容是不直接的。使用生成冲压有时需要更改程序或基于status.txt文件生成文件并将这些文件合并到您的构建中。如果确实需要定义,您可以这样做:
BUILD
cc_binary(
name = "main",
srcs = ["main.c"],
local_defines = ["DATE=\"$(DATE)\""],
)main.c
#include <stdio.h>
#ifndef DATE
#define DATE "none"
#endif
int main() {
printf("date is %s\n", DATE);
return 0;
}$ bazel build main --define DATE="\\\"$(date)\\\""
INFO: Analyzed target //:main (37 packages loaded, 163 targets configured).
INFO: Found 1 target...
Target //:main up-to-date:
bazel-bin/main
INFO: Elapsed time: 0.497s, Critical Path: 0.08s
INFO: 6 processes: 4 internal, 2 linux-sandbox.
INFO: Build completed successfully, 6 total actions
$ bazel-bin/main
date is Mon Nov 28 04:33:30 PM EST 2022(为了允许日期中的空格,所有转义都是必需的,但您可能不需要所有这些。)
请注意,--define DATE="\\\"$(date)\\\""必须在命令行中提供,并且不能放入.bazelrc中,因为.bazelrc的计算不像shell。
https://stackoverflow.com/questions/74601650
复制相似问题