【问题标题】:Can you create a config_setting for an environment variable specified with action_env?您可以为使用 action_env 指定的环境变量创建 config_setting 吗?
【发布时间】:2023-02-02 13:06:13
【问题描述】:

我正在尝试为使用 Bazel 构建的 iOS 应用程序在开发和分发配置文件之间进行选择。

现在我正在使用基于编译模式的 config_setting 来解决这个问题:

config_setting(
    name = "isFastBuild",
    values = {"compilation_mode": "fastbuild"}
)

config_setting(
    name = "isDebugBuild",
    values = {"compilation_mode": "dbg"}
)

config_setting(
    name = "isOptimizedBuild",
    values = {"compilation_mode": "opt"}
)

...

    provisioning_profile = select({
        ":isFastBuild": ":DevelopmentProfile",
        ":isDebugBuild": ":DevelopmentProfile",
        ":isOptimizedBuild": ":DistributionProfile",
    }),

但理想情况下,我可以传递一个环境变量,使它更明确,因为编译模式不真的暗示它是否是发布版本。

有没有一种方法可以使用环境变量(或其他一些功能)来更明确地完成此操作?

【问题讨论】:

    标签: bazel bazel-rules


    【解决方案1】:

    您可以做很多事情:

    • 为您的每个个人资料制作一个带有适当constraint_valuesconstraint_setting。然后为每个设置适当约束值的发布配置文件创建一个平台,并在您要构建时使用带有--platforms 的正确平台。
    • 使用 build_setting 而不是 constraint_setting。使它成为一个标志将使您能够在命令行上设置它的值。您可以在 select() 语句中使用构建设置,方法是将其包装在 config_setting 中。
    • 如果您想使用环境变量而不是命令行选项,您可以创建一个 repository rule 来创建一个 BUILD 文件,其中包含从环境变量到它们的值的简单 starlark 映射。然后,您可以选择使用这些环境变量值来设置构建设置的初始值,或选择要包含在您的平台中的约束值。在简单的 starlark 对象上使用 build_settings/constraint 值的优点是您以后可以使用转换来更改它们的值。 Android currently does this.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 2021-10-30
      • 2015-03-22
      • 2022-10-19
      相关资源
      最近更新 更多