【问题标题】:Does Makefile variable affect global variable?Makefile 变量会影响全局变量吗?
【发布时间】:2021-12-15 07:09:20
【问题描述】:

=======================
生成文件
=======================

BOARD ?= JENNIC 

这是否意味着定义了全局变量BOARDJENNIC

【问题讨论】:

  • 它是本地的,意思是“如果 BOARD 未定义,则定义为字符串 JENNIC”。阅读手册:gnu.org/software/make/manual/make.html
  • “全球”是什么意思?您可能的意思有很多,其中一些的答案与其他的不同。
  • 请澄清您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: variables makefile


【解决方案1】:

如果你有这样的makefile:


BOARD1 ?= foo
BOARD2 = foo
BOARD2 ?= foobar   #will have no effect as BOARD2 is already set...

all:
    echo BOARD1 is $(BOARD1)
    echo BOARD2 is $(BOARD2)

如果没有在 makefile 或环境中的任何其他位置设置 BOARD1BOARD2,它将输出 BOARD1 is fooBOARD2 is foo

另一方面,如果您设置了环境变量(使用导出),那么 make 将使用设置的环境变量的值。

> make
BOARD1 is foo
BOARD2 is foo
> #override the bash variables, note the use of export here...
> export BOARD1=bar
> export BOARD2=bar
> make
BOARD1 is bar
BOARD2 is foo
> # in this case the MAKE version of BOARD2 is overridden
> # but BOARD1 is not overridden (due to the ?=), so it uses the bash
> # value.
> # But, the bash values of the variables are not overridden by the makefile:
> echo BOARD1 is $BOARD1
BOARD1 is bar
> echo BOARD2 is $BOARD2
BOARD2 is bar

【讨论】:

  • 感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2012-11-05
  • 2016-03-30
  • 2013-09-25
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
相关资源
最近更新 更多