在我的makefile中,我有一个变量“NDK_PROJECT_PATH”,我的问题是我如何在编译时将它打印出来?
我读了使文件回显“$PATH”字符串,我尝试了:
@echo $(NDK_PROJECT_PATH)
@echo $(value NDK_PROJECT_PATH)
两者都给了我
"build-local.mk:102: *** missing separator. Stop."
有人知道为什么对我没用吗?
在我的makefile中,我有一个变量“NDK_PROJECT_PATH”,我的问题是我如何在编译时将它打印出来?
我读了使文件回显“$PATH”字符串,我尝试了:
@echo $(NDK_PROJECT_PATH)
@echo $(value NDK_PROJECT_PATH)
两者都给了我
"build-local.mk:102: *** missing separator. Stop."
有人知道为什么对我没用吗?
当前回答
不需要修改Makefile。
$ cat printvars.mak
print-%:
@echo '$*=$($*)'
$ cd /to/Makefile/dir
$ make -f ~/printvars.mak -f Makefile print-VARIABLE
其他回答
不需要修改Makefile。
$ cat printvars.mak
print-%:
@echo '$*=$($*)'
$ cd /to/Makefile/dir
$ make -f ~/printvars.mak -f Makefile print-VARIABLE
你可以在读取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。
运行make -n;它告诉你变量的值。
Makefile……
all:
@echo $(NDK_PROJECT_PATH)
命令:
export NDK_PROJECT_PATH=/opt/ndk/project
make -n
输出:
echo /opt/ndk/project
如果你不想修改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
如果你使用android make (mka) @echo $(NDK_PROJECT_PATH)将不起作用,并给你错误***丢失分隔符。停止。” 如果你想在android make中打印变量,请使用这个答案
NDK_PROJECT_PATH := some_value
$(warning $(NDK_PROJECT_PATH))
这对我很有用