1

这是以下问题

我有Makefile.realMakefile来自上一个问题):

all: a b

a:
        echo a
        exit 1


b:
        echo b start
        sleep 1
        echo b end

现在我想创建Makefile一个简单的包装Makefile.real

  • make使用Makefile.real与调用相同的 args 调用
  • 它应该打印错误消息 id Makefile.realfailed 这是我的目标- 在并行制作结束时打印错误消息(请参阅问题

因此,以下命令应以错误消息终止:

make -j1 a b (1)
make -j2 a b (2)

我怀疑Makefile应该接近:

%:
      $(MAKE) -f Makefile.real $(MAKECMDGOALS); \
      res=$$?; if [ $$res != 0 ]; then echo "Failed!!!"; fi; exit $$res

问题是目标 '%' 将被调用两次 forabfor (2)。

有任何想法吗?

4

1 回答 1

2

这是我结束的解决方案

ifneq ($(REAL_MAKE),1)
# run_make will be called once (it's .PHONY target), 
# even if make is called with several targets
%: run_make
        @:

.PHONY: run_make
run_make:
        $(MAKE) $(MAKECMDGOALS) REAL_MAKE=1; \
        if [ $$? -ne 0 ]; then               \
            echo "*** Error ***" >&2;        \
            exit 1;                          \
        fi

else  # REAL_MAKE defined (actual makefile)

### HERE comes original make we want to wrap ###

endif  # # REAL_MAKE defined (actual makefile)
于 2012-06-14T07:44:16.627 回答