在我的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

其他回答

如果你使用android make (mka) @echo $(NDK_PROJECT_PATH)将不起作用,并给你错误***丢失分隔符。停止。” 如果你想在android make中打印变量,请使用这个答案

NDK_PROJECT_PATH := some_value
$(warning $(NDK_PROJECT_PATH))

这对我很有用

这可以以通用的方式完成,并且在调试复杂的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

下面的命令在Windows上为我做了这件事:

Path | tr ; "\n"

如果你不想修改Makefile本身,你可以使用——eval来添加一个新目标,然后执行这个新目标。

使- - - eval = ' print-tests: @echo TESTS $(TESTS) “print-tests

您可以使用CTRL-V, TAB在命令行中插入所需的制表符

上面的Makefile示例:

all: do-something

TESTS=
TESTS+='a'
TESTS+='b'
TESTS+='c'

do-something:
        @echo "doing something"
        @echo "running tests $(TESTS)"
        @exit 1

运行make -n;它告诉你变量的值。

Makefile……

all:
        @echo $(NDK_PROJECT_PATH)

命令:

export NDK_PROJECT_PATH=/opt/ndk/project
make -n 

输出:

echo /opt/ndk/project