Кортежи должны быть немного более эффективными и из-за этого, быстрее, чем списки, потому что они неизменны.
Вот еще один способ, который работает в 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, от которой зависят настоящие цели.
Вот один способ:
.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
Если ваша make не поддерживает условные операторы, вы можете всегда делайте
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