簡體   English   中英

Bazel-獲取當前的OS和CPU類型作為要在構建規則中使用的變量

[英]Bazel - Get current OS and CPU type as variables to be used in build rules

在當前設置中,我們使用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 ,我們目前正在將-Djavacpp.platform硬編碼為linux-x86_64 是否有一種方法可以從Bazel中自動獲取此值(可能作為變量),以便我們也可以使用相同的構建規則在MacOSX和Windows系統上進行構建?

最好直接使用Bazel構建所有庫,然后免費獲得此行為。 請參閱從Maven遷移到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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM