使用Makefile中的选项值

时间:2017-01-29 17:31:22

标签: makefile

有没有办法获取并使用传递给Makefile的选项(不是env变量)的值?例如。如果在命令行上传递-j选项(用于并行),如何在Makefile中访问它?

3 个答案:

答案 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命令将使用相同的值。你所能做的就是完全禁用并行性,你不能改变它的数量。