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

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

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

两者都给了我

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

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


当前回答

如果你不想修改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

其他回答

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

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

你可以把这个构造添加到任何recipe中,看看make会传递给shell什么:

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

现在,这里发生的事情是,make将整个食谱($(info $$var is [${var}])echo Hello world)存储为一个递归展开的变量。当make决定运行配方时(例如,当您告诉它构建所有时),它展开变量,然后将每一行结果分别传递给shell。

所以,在痛苦的细节中:

它扩展$(info $$var is [${var}])echo Hello world 为此,首先展开$(info $$var is [${var}]) $$变成字面上的$ ${var}变成:-)(说) 副作用是$var is[:-)]出现在标准输出 $(info…)的展开为空 Make留下echo Hello world 首先让打印在stdout上echo Hello world,让你知道它将要求shell做什么 shell在stdout上输出Hello world。

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

Path | tr ; "\n"

make的所有版本都要求命令行缩进,第一个字符是制表符(而不是空格)。如果你向我们展示整个规则,而不是问题中的两行,我们可以给出更清晰的答案,但它应该是这样的:

myTarget: myDependencies
        @echo hi

其中第二行第一个字符必须是TAB。

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

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

因此,创建一个执行块

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

@echo $(NDK_PROJECT_PATH = $(NDK_PROJECT_PATH))