Bazel - 获取当前操作系统和CPU类型作为构建规则中使用的变量

问题描述 投票:0回答:1

在我们当前的设置中,我们使用Bazel作为整体构建工具,但对于单个Java项目,我们使用Maven来构建它们。 Java项目的示例构建规则如下所示:

genrule (
    name = "build-core",
    srcs = [
        ":deps-core",
    ],
    outs = [
        "core-1.0.jar",
    ],
    cmd = "rm -rf $(@D)/src && cd project/ && umask 0000"
        + " && mvn -U clean install -Djavacpp.platform=linux-x86_64 -pl :core"
        + " && cp core/target/core-1.0.jar ../$(@D)"
)

你可以注意到,我们目前正在将-Djavacpp.platform硬编码为linux-x86_64。有没有办法从Bazel自动获取此值,可能作为变量,以便我们可以使用相同的构建规则在MacOSX和Windows系统上构建?

java maven bazel platform
1个回答
0
投票

最好直接使用Bazel构建所有库,然后您将免费获得此行为。见Migrating from Maven to Bazel

但是,如果这不是一个选项,您可以使用Make Variables访问其中一些信息:

genrule(
  name = "g",
  outs = [
    "g.txt",
  ],
  cmd = "echo \"$(TARGET_CPU) $(COMPILATION_MODE) $(JAVA) $(JAVABASE)\" > $@",
  toolchains = [
    "@bazel_tools//tools/jdk:current_java_runtime",
  ],
)

但是,我无法在这些变量中找到操作系统。

或许更好的想法是使用select语句:

genrule(
  name = "f",
  outs = [
    "f.txt",
  ],
  cmd = select({
    "@bazel_tools//src/conditions:darwin": "echo 'macOS' > $@",
    "//conditions:default": "echo 'Linux' > $@",
  }),
)

然后,您将为每个平台编写不同的cmd

© www.soinside.com 2019 - 2024. All rights reserved.