我能否确定在Makefile中是否使用了--jobs?

oni*_*ake 5 makefile gnu-make

我想根据是否启用并行构建来设置一些变量,因此我尝试了以下操作:

jobs:
»·echo "executing jobs job"

ifneq (,$(findstring -j,$(MAKEFLAGS)))
»·$(warning "parallel!")
else
»·$(warning "not parallel!")
endif
Run Code Online (Sandbox Code Playgroud)

这就是发生的情况:

$ make -j2
Makefile:2: "not parallel!"
echo "executing jobs job"
executing jobs job
Run Code Online (Sandbox Code Playgroud)

我也尝试过测试$(JOBS),但是没有运气。

我有办法告诉Makefile内部是否使用了--jobs参数吗?


附加信息:

$ make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-pc-linux-gnu
Run Code Online (Sandbox Code Playgroud)

bob*_*ogo 2

令人惊讶的是,只有在配方扩展时扩展时${MAKEFLAGS}才会获得。-j

生成文件:

$(warning [${MAKEFLAGS}])

.PHONY: all
all:
    $(warning [${MAKEFLAGS}])
    echo Now do something useful
Run Code Online (Sandbox Code Playgroud)

跑步:

$ make -j5
1:1: []
1:5: [ -j --jobserver-fds=3,4]
echo Now do something useful
Now do something useful
Run Code Online (Sandbox Code Playgroud)