有没有办法在目标体内重新分配Makefile变量值?
我想要做的是为调试编译添加一些额外的标志:
%.erl: %.beam
$(ERLC) $(ERLFLAGS) -o ebin $<
test: clean debug_compile_flag compile compile_test
debug_compile:
$(ERLCFLAGS) += -DTEST
Run Code Online (Sandbox Code Playgroud)
因此,如果我调用测试目标,我想清理我的环境,添加一些新标志(比如现有的-DTEST),再次编译整个代码(第一个源,然后是测试模块).
我不想复制/粘贴用于编译的代码,因为有很多逻辑放在这里和那里.
有没有一些简单的方法来重新定义变量值,以便我可以重用现有的代码?
Bet*_*eta 78
是的,有一种简单的方法可以做到这一点,而无需重新运行Make.使用特定于目标的变量值:
test: clean debug_compile
debug_compile: ERLCFLAGS += -DTEST
debug_compile: compile compile_test;
Run Code Online (Sandbox Code Playgroud)
Ian*_*Ooi 45
另一个答案是:在规则执行时定义make变量.
对于懒惰,您可以使用以下规则(FLAG并且DEBUG是我的变量):
.DBG:
$(eval FLAG += $(DEBUG))
Run Code Online (Sandbox Code Playgroud)
这是我使用的解决方案:
PASSWORD = abc123
main: sub
@echo "in main" $(PASSWORD)
sub:
@echo "in sub" $(PASSWORD)
$(eval PASSWORD=qwerty)
@echo "in sub" $(PASSWORD)
Run Code Online (Sandbox Code Playgroud)
如果运行make main则输出为:
in sub abc123
in sub qwerty
in main qwerty
Run Code Online (Sandbox Code Playgroud)
您可以看到原始值"abc123"被覆盖,sub并且新值"qwerty"在该级别可见main。
Did*_*set -9
编辑:正如 Beta 在另一个答案中所解释的那样,这是可能的。
不可以。在 Makefile 中没有办法做到这一点。但是,您可以在命令行上更改变量的值make。如果您按如下方式重写 Makefile:
ERLCFLAGS += $(ERLCFLAGSADDED)
%.erl: %.beam
$(ERLC) $(ERLCFLAGS) -o ebin $<
test: clean compile compile_test
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下命令调用 make 来执行测试:
make ERLCFLAGSADDED=-DTEST test
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54273 次 |
| 最近记录: |