debugging - 如何调试 GNU make 的变量赋值
问题描述
我的 Makefile 包含类似
BASE_VAR=$(cat path/to/value.txt)
DERIVED_VAR=$(if $(BASE_VAR),foo,bar)
这不会产生我预期的结果。make --debug=a
产生详细的跟踪,但path/to/value.txt
不会出现在其中的任何地方。如何在 makefile 中调试这种变量赋值?
解决方案
问题来自:
BASE_VAR=$(cat path/to/value.txt)
由于没有命名变量或宏cat path/to/value.txt
,扩展
$(cat path/to/value.txt)
产生空字符串。如果要BASE_VAR
使用文件内容设置变量,则path/to/value.txt
需要shell
make 函数:
BASE_VAR = $(shell cat path/to/value.txt)
关于调试变量的问题,在您的情况下最简单的可能是使用info
make 函数:
$ 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))
推荐阅读
- c# - 处理来自对象的空 Json 数组
- reactjs - Redux 将 dispatch 连接到 props
- python-3.x - Y = churn.iloc[:, 18].values
- c# - xunit.net 测试发现并运行,但“调用执行程序 'executor://xunit/VsTestRunner2/uap' 时发生异常”
- java - Hashmap 非空元组 vavr
- tsql - 连接两个表时需要多个条件的真假答案
- delphi - 为什么CopyRect在delphi 10.3中翻转了第二张图片?
- python - 如何在 Cython 中返回 C++ 包装的对象
- java - 如何为算术计算java解析器编写递归while循环
- c# - MSTest:测试分组