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

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/

10-13 04:33