Как условно настроить make файл на основе результатов grep?
Я ищу способ вытащить из make файла, если определенная строка не найдена при проверке версии инструмента.
Выражение grep, которое я ищу, соответствует:
dplus -VV | grep 'build date and time: Nov 1 2009 19:31:28'
который возвращает соответствующую строку, если установлена надлежащая версия dplus.
Как мне работать с условным в мой make файл на основе этого выражения?
Ответы
Ответ 1
Здесь другой способ, который работает в 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, от которой зависят реальные.
Ответ 2
Вот один из способов:
.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.
Ответ 3
Если это 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