2013-10-22 63 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發佈。我上過什麼星球?謝謝保羅! –