2013-10-22 38 views
0

我想要检测Makefile命令行中是否设置了“-s”。是否有一个变量可以捕捉到我可以测试的选项?如何访问Makefile中的make选项

例如,我想要做的事,如:

的Makefile:

if ($(MAKE_OPTIONS), -s) 
    #do something 
endif 

调用:

make $(MAKEFILE_OPTIONS) -C some_dir 

回答

0

你要找的变量是MAKEFLAGS

ifeq ($(filter s, $(MAKEFLAGS)),s) 
# do something 
endif 
0

不,filter不是。使用findstring

ifneq ($(findstring s, $(MAKEFLAGS)),) 

...

endif 

$(if $(findstring s, $(MAKEFLAGS)),...) 
1

可惜这比较难找到一个真正的便携式(跨GNU的不同版本做)的方式来做到这一点。如果您在名称中设置了带“s”的标志(例如,--warn-undefined-variables),Mark的解决方案会给出误报。

在GNU使4.0及以上,MAKEFLAGS的布局是明确的,你可以使用这个:

$(findstring s,$(firstword -$(MAKEFLAGS)) 

保持强劲,可靠地告诉我们,如果-s给出。但是,在GNU make 4.0以前的版本中,这种方法无法可靠地工作。您可以使用此:

$(findstring s,$(firstword -$(MAKEFLAGS)))$(filter -s,$(MAKEFLAGS)) 

这扩展成空字符串,如果-s未给,或一个非空字符串,如果它是。我相信这将适用于所有版本的GNU make。

+0

哦,上帝,我忘了你可以有那么长的选择。谢谢,先生,我可以有另一个! –

+0

我没有注意到4.0发布。我上过什么星球?谢谢保罗! –