有没有办法获取并使用传递给Makefile的选项(不是env变量)的值?例如。如果在命令行上传递-j选项(用于并行),如何在Makefile中访问它?
答案 0 :(得分:1)
在GNU Make中,通过检查MAKEFLAGS
的值(使用findstring
)可以检测到大多数选项。该值是一串"规范"通常选项的单字母变体。例如,如果您运行Make为make --keep-going --question
,则MAKEFLAGS
将为"kq"
。
-j
是不同的。如果您运行make -j
,则MAKEFLAGS
将包含-j
。如果您运行make -j2
,则MAKEFLAGS
将包含-j --jobserver-ids,3,4
。
所以你有足够的信息来区分案件&#34;根本不是平行的&#34;,&#34;平行和无限的&#34;并且&#34;平行且有限&#34;。无法知道最后一个案例<num>
是什么,我很害怕。
答案 1 :(得分:1)
如果您想要参数-j
,可以使用.MAKE.JOBS
。通常,MAKEFLAGS
变量是您想要的变量。
可能每个make
都没有可用的版本(FreeBSD的make
中提供了它们)。
答案 2 :(得分:1)
正如Michael Livshin所说,除非你升级到GNU make 4.2或更高版本,否则你无法知道...来自NEWS文件:
* The amount of parallelism can be determined by querying MAKEFLAGS, even when
the job server is enabled (previously MAKEFLAGS would always contain only
"-j", with no number, when job server was enabled).
这基本上意味着-j2
将始终显示在MAKEFLAGS
中,而不仅仅是-j
。
请注意,更改此值不会产生任何影响,但如果这是您感兴趣的内容......则在调用第一个make命令时会设置并行度和所有其他make命令将使用相同的值。你所能做的就是完全禁用并行性,你不能改变它的数量。