如何调试 GNU make 的变量赋值



My Makefile包含类似的内容

BASE_VAR=$(cat path/to/value.txt)
DERIVED_VAR=$(if $(BASE_VAR),foo,bar)

这并没有产生我预期的结果。make --debug=a生成详细的跟踪,但path/to/value.txt没有出现在其中的任何位置。如何在生成文件中调试这种变量分配?

问题来自:

BASE_VAR=$(cat path/to/value.txt)

由于没有使名为cat path/to/value.txt的变量或宏成为展开$(cat path/to/value.txt)产生空字符串。如果你想用文件path/to/value.txt的内容设置变量BASE_VAR,你需要shell的make函数:

BASE_VAR = $(shell cat path/to/value.txt)

关于调试变量的问题,在您的情况下,最简单的可能是使用infomake函数:

$ cat Makefile
BASE_VAR = $(shell cat path/to/value.txt)
DERIVED_VAR = $(if $(BASE_VAR),foo,bar)
.PHONY: debug
debug:
$(info BASE_VAR = $(BASE_VAR))
$(info DERIVED_VAR = $(DERIVED_VAR))
$ make debug
BASE_VAR = blah
DERIVED_VAR = foo
make: Nothing to be done for 'debug'.

但是,特定于目标的变量在不同的目标中具有不同的值。在感兴趣目标的配方中使用$(info ...)

target: VAR = value
target: ...
$(info VAR of $@ = $(VAR))

最新更新