强制在调用特定Makefile规则时定义某个环境变量

时间:2018-06-19 00:09:31

标签: makefile

考虑下面的Makefile。

rulea:
    echo rulea

ruleb:
    echo ruleb

我希望在调用SPL_VAR时定义环境变量ruleb,否则将中止。调用rulea时,不应强制执行此约束。我怎样才能实现同样的目标?

1 个答案:

答案 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 1exit 0$(error ...)提供。