提问者:小点点

如何在makefile中打印出变量


在我的makefile中,我有一个变量'NDK_PROJECT_PATH',我的问题是当它编译时如何打印出来?

我读取了显示“$PATH”字符串的Make file echo,并尝试:

@echo $(NDK_PROJECT_PATH)
@echo $(value NDK_PROJECT_PATH)

两者都给了我

"build-local.mk:102: *** missing separator.  Stop."

有谁知道为什么它对我不起作用?


共3个答案

匿名用户

您可以使用这种方法(使用名为“var”的变量)在读取makefile时打印出变量(假设GNU make as您已经适当地标记了这个问题):

$(info $$var is [${var}])

您可以将此构造添加到任何配方中,以查看make将传递给shell的内容:

.PHONY: all
all: ; $(info $$var is [${var}])echo Hello world

现在,make将整个配方($(info$$var is[${var}])echo Hello world)存储为一个递归扩展的变量。当make决定运行配方时(例如,当您告诉它构建all),它会展开变量,然后将得到的每一行分别传递给shell。

因此,令人痛苦的细节是:

  • 它展开$(info$$var是[${var}])echo Hello World
  • 为此首先展开$(info$$var is[${var}])
    • $$变为文字$
    • ${var}变为:-)(例如)
    • 副作用是$var is[:-)]出现在标准输出
    • $(info...)的展开为空
    • 首先在stdout上打印echo Hello world,让您知道它将要求shell执行什么操作

匿名用户

根据GNU Make手册和下面答案中的“bobbogo”,您可以使用info/warning/error来显示文本。

$(error   text…)
$(warning text…)
$(info    text…)

要打印变量,

$(error   VAR is $(VAR))
$(warning VAR is $(VAR))
$(info    VAR is $(VAR))

“error”将在显示错误字符串后停止make执行

匿名用户

来自“Mr.Make Post”https://www.cmcrossroads.com/article/printing-value-makefile-variable

将以下规则添加到生成文件:

print-%  : ; @echo $* = $($*)

然后,如果您想要找出一个makefile变量的值,只需:

make print-VARIABLE

它将返回:

VARIABLE = the_value_of_the_variable