【问题标题】:GNU Make: Check number of parallel jobsGNU Make:检查并行作业的数量
【发布时间】:2018-02-19 10:11:18
【问题描述】:

我想在 (GNU) 生成文件中添加一个快速检查,它可以提醒用户-j/--jobs(并行生成)的可用性。也就是说,像

$ 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 Make 的建议更改 https://github.com/esantoro/make/commit/b0334e7f3009dc58dbc8e6e6fdec94711537fb3b

但也许有一些更新和/或更简单的东西。

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    最简单/最好的解决方案是将您的 GNU make 版本升级到 4.2 或更高版本。从该版本开始,MAKEFLAGS 变量将提供完整的-j 选项,包括数字。新闻文件说:

    • 可以通过查询 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
    

    【讨论】:

      【解决方案2】:

      使用make Jobserver protocol,您可以比该博客建议的更轻松、更快速地确定工作数量:

      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.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-03
        • 2018-09-26
        • 2017-05-27
        • 2011-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多