如何在使用并行执行时使用特定于目标的变量值并调用其他规则?

How can I use Target-specific Variable Values and call other rules whilst using parallel execution?

我有一个包含以下行的 makefile:

debug: CFLAGS += $(DEBUGFLAGS)
debug: clean all

我想要做的是 运行 'clean' 和 'all' 与目标特定变量值。这工作正常,符合预期。

但是如果我 运行 这与并行执行 'clean' 可能会破坏由 'all' 创建的文件。

因此,如果我执行以下操作:

debug: CFLAGS += $(DEBUGFLAGS)
debug:
    $(MAKE) clean
    $(MAKE) all

这将确保遵守规则的顺序。但目标特定变量不会被纳入新的 make 调用。

所以我想知道如何同时使用目标特定变量和并行执行。

为什么不也传递值?

debug: CFLAGS += $(DEBUGFLAGS)
debug:
        $(MAKE) clean CFLAGS='$(CFLAGS)'
        $(MAKE) all CFLAGS='$(CFLAGS)'

不确定是哪个版本的make引入的(3.8?4.0?),但是如果你在伪目标.NOTPARALLEL中添加'clean',那么clean就不是运行并行的,并且其他目标是。我使用 make -j clean all,这似乎按预期工作。

例如

...<variables defined here>...

all: $(TARGETS)
clean:; rm -rf $(TARGETS) ...

...<rules defined here>...

.PHONY: all clean
.NOTPARALLEL: clean