makefile并行运行目标

sho*_*a T 6 bash shell makefile

我有以下makefile,有两个规则.

有没有办法并行运行这两个规则,我的意思是最大化核心的能力?我看到这一但不确定我是如何将它用于我的目的,因为我想在makefile中而不是从命令行处理它.

即并行运行module1和2目标.

这是makefile:

all: module1 module2

.PHONY: module1
module1:
    @echo "run module 1"
    DIR=$(PWD)
    @echo $(DIR)

.PHONY: module2
module2:
    @echo "run module2”

cleanup: 
    fzr clean $(DIR)
Run Code Online (Sandbox Code Playgroud)

lub*_*bgr 9

您可以make通过makefile本身的命令行调用来设置您经常传递的选项.将此行添加到makefile中

MAKEFLAGS += -j2
Run Code Online (Sandbox Code Playgroud)

并且你可以在make没有-j标志的情况下调用它,当它们不相互依赖时,它仍会产生两个并行构建目标的进程.要自动确定要生成的作业数,可以在linux上使用它

NPROCS = $(shell grep -c 'processor' /proc/cpuinfo)
MAKEFLAGS += -j$(NPROCS)
Run Code Online (Sandbox Code Playgroud)

并在MacOS上

NPROCS = $(shell sysctl hw.ncpu  | grep -o '[0-9]\+')
MAKEFLAGS += -j$(NPROCS)
Run Code Online (Sandbox Code Playgroud)

  • @shopiaT`MAKEFLAGS + = -j $(shell nproc || printf 1)`(`|| printf 1`,这样如果'nproc`不可用,你将获得'1`). (2认同)
  • 选择`@echo $(NPROCS)`. (2认同)