![](/img/trans.png)
[英]build gradle variables to be used in code depending on flavor AND build type
[英]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.