考虑下面的Makefile。
rulea:
echo rulea
ruleb:
echo ruleb
我希望在调用SPL_VAR
时定义环境变量ruleb
,否则将中止。调用rulea
时,不应强制执行此约束。我怎样才能实现同样的目标?
答案 0 :(得分:1)
我们首先假设“已定义”表示“不会扩展为空字符串”,而“ abort ”表示“< em>以非零退出状态停止并退出“。
解决方案1 :您可以使用shell条件:
来实现此目的 a1 l1 ex
0 a NaN NaN
1 a kl NaN
2 a NaN kl
3 a NaN kl
4 a er kl
5 b ye NaN
6 b NaN ye
7 b fk ye
8 b NaN fk
解决方案2 :同一理念的更紧凑形式:
ruleb:
@if [ -n "$$SPL_VAR" ]; then \
echo ruleb; \
else \
echo "SPL_VAR undefined, aborting"; \
exit 1; \
fi
解决方案3 :制作文档说:
每个启动时看到的环境变量都会转换为具有相同名称和值的make变量。
所以,你也可以使用make conditionals:
rulec:
@[ -n "$$SPL_VAR" ] && echo rulec || \
{ echo "SPL_VAR undefined, aborting"; exit 1; }
解决方案4 :最后,您还可以使用make ruled:
ifeq ($(SPL_VAR),)
$(error "SPL_VAR undefined, aborting")
else
@echo ruled
endif
功能:
if
<强>演示强>:
rulee:
$(if $(SPL_VAR),@echo rulee,$(error "SPL_VAR undefined, aborting"))
注意:如果“ abort ”表示“对此规则不执行任何操作但不停止”,则只需替换host> unset SPL_VAR
host> make ruleb
SPL_VAR undefined, aborting
make: *** [Makefile:4: ruleb] Error 1
host> make rulec
SPL_VAR undefined, aborting
make: *** [Makefile:12: rulec] Error 1
host> make ruled
Makefile:17: *** "SPL_VAR undefined, aborting". Stop.
host> make rulee
Makefile:23: *** "SPL_VAR undefined, aborting". Stop.
host> export SPL_VAR=foo
host> make ruleb rulec ruled rulee
ruleb
rulec
ruled
rulee
在{4}提出的解决方案中,exit 1
和exit 0
由$(error ...)
提供。