Bazel:向C++程序传递构建时变量

iezvtpos  于 2022-12-24  发布在  其他
关注(0)|答案(2)|浏览(223)

我有一个C++程序可以打印VERSION字符串的值:

#include <iostream>

int main() {
    std::cout << "Version: " << VERSION << std::endl;
    return 0;
}

我想在构建时更改VERSION的值(一个字符串)。这是我的Bazel配置,包含VERSION的默认值local_defines

cc_binary(
    name = "main",
    srcs = ["main.cpp"],   
    local_defines = ["VERSION=\\\"alpha\\\""],
)

当我这样调用它时,它仍然打印alpha,而不是我为VERSION传递的新值。

bazel run --define VERSION=beta main
INFO: Analyzed target //:main (1 packages loaded, 2 targets configured).
INFO: Found 1 target...
Target //:main up-to-date:
  bazel-bin/main
INFO: Elapsed time: 0.965s, Critical Path: 0.80s
INFO: 4 processes: 2 internal, 2 darwin-sandbox.
INFO: Build completed successfully, 4 total actions
INFO: Build completed successfully, 4 total actions
Version: alpha

为什么这行不通?

wgx48brx

wgx48brx1#

cc_binary.local_defines--define标志是独立的,即使它们共享相同的名称。local_defines支持"Make" variable substitution,这意味着这将起作用:local_defines = ["VERSION=\\\"$(VERSION)\\\""].

rsaldnfx

rsaldnfx2#

也许--workspace_status_command是你的一个选择。一个例子可以在here中找到。

相关问题