如何打破GNU 使 shell 函数调用多行



这是正确的代码,但它很长

$(shell if [ ! -f .oldmodel ] || [ "$(MODEL)" != `cat .oldmodel` ] ; then echo $(MODEL) > .oldmodel ; fi )

我试过了

$(shell if [ ! -f .oldmodel ] || [ "$(MODEL)" != `cat .oldmodel` ] ; 
    then echo $(MODEL) > .oldmodel ; fi )

但是有一个错误

common.mak:21: *** 缺少分隔符。 停。

奇怪的是,.oldmodel生成了,它的内容是正确的,下次调用时,不再有错误。

谁能解释一下。

看起来你试图以错误的方式实现一些目标。请考虑以下解决方案:

ifeq ($(MODEL),)
    MODEL := $(shell cat .oldmodel 2>/dev/null)
endif
stuff_to_do: .oldmodel
    mkdir -p $(MODEL)
.oldmodel: $(if $(shell echo '$(MODEL)' | cmp $@ 2>/dev/null), phony,)
    @if [ -z "$(MODEL)" ]; then echo "error: MODEL is not set" && exit 1; fi
    echo '$(MODEL)' > $@
clean::
    rm -rf $(MODEL)
    rm -f .oldmodel

stuff_to_do是使用 $(MODEL) 变量的规则。请注意,.oldmodel规则的先决条件是phony或空,具体取决于文件内容和$(MODEL) .oldmodel相等性。此phony被视为一些不存在的文件/规则,因此当phony存在时,它会导致重建.oldmodel

最新更新