我想根据是否启用并行构建来设置一些变量,因此我尝试了以下操作:
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)
令人惊讶的是,只有在配方扩展时扩展时${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)