如何在使用并行执行时使用特定于目标的变量值并调用其他规则?
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
我有一个包含以下行的 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