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

我读了使文件回显“$PATH”字符串,我尝试了:

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

两者都给了我

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

有人知道为什么对我没用吗?


当前回答

这可以以通用的方式完成,并且在调试复杂的makefile时非常有用。按照在另一个答案中描述的相同技术,您可以将以下内容插入到任何makefile中:

# if the first command line argument is "print"
ifeq ($(firstword $(MAKECMDGOALS)),print)

  # take the rest of the arguments as variable names
  VAR_NAMES := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))

  # turn them into do-nothing targets
  $(eval $(VAR_NAMES):;@:))

  # then print them
  .PHONY: print
  print:
          @$(foreach var,$(VAR_NAMES),\
            echo '$(var) = $($(var))';)
endif

然后你可以执行“make print”来转储任何变量的值:

$ make print CXXFLAGS
CXXFLAGS = -g -Wall

其他回答

你可以在你的make文件中创建一个vars规则,像这样:

dispvar = echo $(1)=$($(1)) ; echo

.PHONY: vars
vars:
    @$(call dispvar,SOMEVAR1)
    @$(call dispvar,SOMEVAR2)

这里有一些更健壮的方法来转储所有变量:gnu make:列出特定运行中所有变量(或“宏”)的值。

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

在Makefile中添加以下规则:

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

然后,如果你想找出makefile变量的值,只需:

make print-VARIABLE

它会返回:

VARIABLE = the_value_of_the_variable

根据GNU制作手册以及下面答案中的“bobbogo”所指出的, 你可以使用info / warning / error来显示文本。

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

要打印变量,

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

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

问题是echo只在执行块下工作。即任何在“xx:”之后的内容

因此,第一个执行块以上的任何内容都只是初始化,因此不能使用任何执行命令。

因此,创建一个执行块

如果我想查看变量值,我通常会返回一个错误。(除非你想看看价值。它将停止执行。)

@echo $(NDK_PROJECT_PATH = $(NDK_PROJECT_PATH))