使用条件中的条件的Makefile问题在命令的命令部分中使用

时间:2008-10-23 04:40:16

标签: makefile

我有一段具有这种结构的makefile:


bob:
ifdef DEBUG
    @echo running
endif
    @echo chug chug chug
ifdef DEBUG
    @echo done
endif    

bobit:
    @echo "before"
    @make bob
    @echo "after"

我在这里大大简化了,所有的回声实际上都是非常重要的命令块,并且有更多条件的东西,但这抓住了我问题的本质。

由于技术原因,我现在不想进入,我需要摆脱那个submake,但因为echo代表了大量的代码,我不想只是复制并通过bob的主体submake的地方。

理想情况下,我想做的就是这样的事情


define BOB_BODY 
ifdef DEBUG
    @echo running
endif
    @echo chug chug chug
ifdef DEBUG
    @echo done
endif
endef

bob:
    $(BOB_BODY)

bobit:
    @echo "before"
    $(BOB_BODY)
    @echo "after"

不幸的是,条件似乎是在阻止我,他们产生“ifdef:Command not found”错误,我尝试用eval和call的各种组合解决这个问题,但似乎无法找到一种方法来实现它工作

如何使这项工作?甚至是解决问题的正确方法?

2 个答案:

答案 0 :(得分:2)

我解决这个问题的方法是使用bash条件,这实际上有一定的意义,因为我们正在使用命令而不是制定规则。

所以我从上面得到的理想解决方案就像是


define BOB_BODY
    @if [[ -n "$(DEBUG)" ]]; then \
        echo running; \
    fi;
    @echo chug chug chug
    @if [[ -n "$(DEBUG)" ]]; then \
        echo done; \
    fi
endef

bob: $(BOB_BODY)

bobit: @echo "before" $(BOB_BODY) @echo "after"

答案 1 :(得分:0)

您只需更改ifdef / define的顺序:

ifdef DEBUG
  define BOB_BODY 
    @echo running
    @echo chug chug chug
    @echo done
  endef
else 
  define BOB_BODY 
    @echo chug chug chug
  endef
endif

<强>更新

define CHUG
  @echo chug chug chug
endef

ifdef DEBUG
  define BOB_BODY 
    @echo running
    $(CHUG)
    @echo done
  endef
else 
  define BOB_BODY 
    $(CHUG)
  endef
endif