我想根据是否启用并行构建来设置一些变量,因此我尝试了以下操作:
jobs:
»·echo "executing jobs job"
ifneq (,$(findstring -j,$(MAKEFLAGS)))
»·$(warning "parallel!")
else
»·$(warning "not parallel!")
endif
这就是发生的情况:
$ make -j2
Makefile:2: "not parallel!"
echo "executing jobs job"
executing jobs job
我也尝试测试
$(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
最佳答案
令人惊讶的是,${MAKEFLAGS}
仅在配方扩展时进行扩展时才获得-j
。
生成文件:
$(warning [${MAKEFLAGS}])
.PHONY: all
all:
$(warning [${MAKEFLAGS}])
echo Now do something useful
运行:
$ make -j5
1:1: []
1:5: [ -j --jobserver-fds=3,4]
echo Now do something useful
Now do something useful
关于makefile - 我能否确定在Makefile中是否使用了--jobs?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22842644/