如果在檢查工具版本時找不到某個字符串,我正在尋找一種拯救makefile的方法。如何根據grep結果條件化makefile?
grep的表達我在尋找匹配的是:
dplus -VV | grep 'build date and time: Nov 1 2009 19:31:28'
如果安裝DPLUS的正確版本,返回匹配的行。
如何根據此表達式將條件工作到我的makefile中?
如果在檢查工具版本時找不到某個字符串,我正在尋找一種拯救makefile的方法。如何根據grep結果條件化makefile?
grep的表達我在尋找匹配的是:
dplus -VV | grep 'build date and time: Nov 1 2009 19:31:28'
如果安裝DPLUS的正確版本,返回匹配的行。
如何根據此表達式將條件工作到我的makefile中?
這裏的另一種方式在GNU Make中有效:
DPLUSVERSION = $(shell dplus -VV | grep 'build date and time: Nov 1 2009 19:31:28') target_of_interest: do_things do_things_that_uses_dplus do_things: ... do_things_that_uses_dplus: ifeq ($(DPLUSVERSION),) $(error proper version of dplus not installed) endif ...
這個目標可以是真實的,也可以是PHONY的真實目標。
工作了一個魅力,和ifeq ... $(錯誤...)讓我發出一個錯誤消息,讓開發人員知道他們的構建被殺害。 – 2009-12-10 21:49:02
警告! '$(錯誤)'在**評估**時觸發。這意味着,如果'DPLUSVERSION'觸發錯誤條件,'do_things'將**從不**運行。編輯來解決這個問題。 https://www.gnu.org/software/make/manual/html_node/Make-Control-Functions.html – gcb 2015-12-01 01:26:48
@gcb:我不認爲你測試了你的解決方案。 – Beta 2015-12-01 02:38:22
這裏有一種方法:
.PHONY: check_dplus
check_dplus:
dplus -VV | grep -q "build date and time: Nov 1 2009 19:31:28"
如果grep的沒有找到匹配,它應該給
make: *** [check_dplus] Error 1
然後讓你的其他目標取決於check_dplus目標。
如果這是gnu make,你可以做
your-target: $(objects)
ifeq (your-condition)
do-something
else
do-something-else
endif
在這裏看到Makefile contionals
如果你化妝不支持條件句,你總是可以做
your-target:
dplus -VV | grep -q "build date and time: Nov 1 2009 19:31:28" || $(MAKE) -s another-target; exit 0
do-something
another-target:
do-something-else
這是哪一種? GNU? – Davide 2009-12-09 21:09:20
是的。特別是在Cygwin中,但那只是GNU。 – 2009-12-10 14:13:22