如何在Makefile中配置实现两个make伪目标并行执行?
解决方案
方案1:递归调用make(兼容性最优,不影响其他目标执行逻辑)
这是最推荐的实现方式,仅在执行make watch时启用并行,不会改变其他目标的默认执行规则:
.PHONY: watch_css1 watch_css1: @(sass --watch foo1.scss:foo1.css) .PHONY: watch_css2 watch_css2: @(sass --watch foo2.scss:foo2.css) .PHONY: watch watch: # 调用make自身并携带并行参数,无需手动输入 @$(MAKE) -j watch_css1 watch_css2
这里-j不带数值的写法会让make自动匹配子目标数量开启并行,后续新增监听任务不需要修改参数值。
方案2:全局配置MAKEFLAGS(不推荐,会影响所有目标)
如果可以接受所有make任务默认并行,可在Makefile开头全局添加配置:
MAKEFLAGS += -j2 # 后续接原有Makefile内容
注意:该配置会全局生效,若项目存在有依赖顺序要求的编译任务,可能会出现执行顺序错乱导致的失败问题。
内容的提问来源于stack exchange,提问作者Milad
相关产品推荐
相关产品推荐

