我想快速检查(GNU)makefile,它可以提醒用户-j
/ --jobs
(并行make)的可用性。就是这样的事情
$ make
TIP: this will build faster if you use use "make -j"
Building ..
$ make -j
Building in parallel ..
如何在执行Makefile时确定并行作业的数量?
这里有一个技巧 http://blog.jgc.org/2015/03/gnu-make-insanity-finding-value-of-j.html
并建议更改GNU使自己在这里 https://github.com/esantoro/make/commit/b0334e7f3009dc58dbc8e6e6fdec94711537fb3b
但也许有更新和/或更容易的东西。
答案 0 :(得分:4)
最简单/最佳解决方案是将您的GNU make版本升级到4.2或更高版本。从该版本开始,MAKEFLAGS
变量将提供完整的-j
选项,包括该数字。 NEWS文件说:
- 即使在查询MAKEFLAGS时,也可以确定并行度 作业服务器已启用(以前MAKEFLAGS始终只包含 " -j",没有编号,启用作业服务器时。)
所以:
$ make --version
GNU Make 4.2.1
...
$ echo 'all:;@echo $(MAKEFLAGS)' | make -f-
$ echo 'all:;@echo $(MAKEFLAGS)' | make -f- -j
-j
$ echo 'all:;@echo $(MAKEFLAGS)' | make -f- -j10
-j10 --jobserver-auth=3,4
$ echo 'all:;@echo $(patsubst -j%,%,$(filter -j%,$(MAKEFLAGS)))' | make -f- -j10
10
答案 1 :(得分:2)
SHELL := /bin/bash
all:
@${MAKE} --no-print-directory job_count_test
job_count_test:
@+[[ "${MAKEFLAGS}" =~ --jobserver[^=]+=([0-9]+),([0-9]+) ]] && ( J=""; while read -t0 -u $${BASH_REMATCH[1]}; do read -N1 -u $${BASH_REMATCH[1]}; J="$${J}$${REPLY}"; done; echo "Building with $$(expr 1 + $${#J}) jobs."; echo -n $$J >&$${BASH_REMATCH[2]} ) || echo "TIP: this will build faster if you use use \"make -j$$(grep -c processor /proc/cpuinfo)\""
.PHONY: all job_count_test
然后:
$ make
TIP: this will build faster if you use use "make -j8"
$ make -j12
Building with 12 jobs.