【问题标题】:Reading Makefile variables in golang when building Android构建Android时在golang中读取Makefile变量
【发布时间】:2020-03-02 13:31:34
【问题描述】:

device/vendor/rules.mk 我们有几个标志。例如:

INCLUDE_VENDOR_PACKAGES:=true

我正在编写一个 go 包来根据上述标志进行一些条件操作。我尝试了几种方法来获取这个标志的值,例如通过 Golang 的 os 包 API 和 $ 运算符,就像我们在 shell 脚本中所做的那样。但这些都不起作用。

在构建时是否可以在 go 包中从 Makefile 获取标志?

【问题讨论】:

  • 创建一个全局变量var INCLUDE_VENDOR_PACKAGES = ""。在构建脚本中添加 --ldflags "-X main.INCLUDE_VENDOR_PACKAGES=${FLAG}" 作为构建参数。 (而不是 main 可能是变量所在的包路径)
  • 我将该变量作为示例之一。可能有很多变量需要我编写 Golang 条件实现。这种方法需要大量不必要的代码添加。 @LaevusDexter

标签: go makefile android-source


【解决方案1】:

Make 变量是 make 的内部变量。* 它们不会(直接)暴露给在规则中运行的配方(或由 GNU 函数实现运行的命令)。您需要明确规定将这些值提供给 make 运行的命令,通常是通过将所需值显式放置到各个命令的环境中,或者将它们作为命令行参数传递给这些命令。


* 但是,make 获取变量值的一个地方是来自同名环境变量,在某些情况下,make 依次运行的命令也可以使用。 p>

【讨论】:

  • 我认为应该有一个Android方式,因为Android Build系统使用Makefile、Blueprint和Golang。作为参考,请查看 Golang 中一些常用 Makefile 键映射的映射,here.
  • @TheLittleNaruto,构建属性有一个共享词汇表并不意味着make 自动公开这些数据以构建它运行的配方,这是我需要的任何东西如您所问,可以将其描述为从 Makefile 获取此类数据的配方中的命令。毫无疑问,有一种机制可以通过 Android 更广泛的构建框架传达此类信息——环境变量仍然是我的猜测——但这不会改变对所提出问题的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多