我想要檢測Makefile命令行中是否設置了「-s」。是否有一個變量可以捕捉到我可以測試的選項?如何訪問Makefile中的make選項
例如,我想要做的事,如:
的Makefile:
if ($(MAKE_OPTIONS), -s)
#do something
endif
調用:
make $(MAKEFILE_OPTIONS) -C some_dir
我想要檢測Makefile命令行中是否設置了「-s」。是否有一個變量可以捕捉到我可以測試的選項?如何訪問Makefile中的make選項
例如,我想要做的事,如:
的Makefile:
if ($(MAKE_OPTIONS), -s)
#do something
endif
調用:
make $(MAKEFILE_OPTIONS) -C some_dir
你要找的變量是MAKEFLAGS
。
ifeq ($(filter s, $(MAKEFLAGS)),s)
# do something
endif
不,filter
不是。使用findstring
:
ifneq ($(findstring s, $(MAKEFLAGS)),)
...
endif
或
$(if $(findstring s, $(MAKEFLAGS)),...)
可惜這比較難找到一個真正的便攜式(跨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。
哦,上帝,我忘了你可以有那麼長的選擇。謝謝,先生,我可以有另一個! –
我沒有注意到4.0發佈。我上過什麼星球?謝謝保羅! –