Как к conditionalize make-файл, основанный на результатах grep?

Кортежи должны быть немного более эффективными и из-за этого, быстрее, чем списки, потому что они неизменны.

13
задан Mike Lewis 9 December 2009 в 21:08
поделиться

3 ответа

Вот еще один способ, который работает в 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, от которой зависят настоящие цели.

13
ответ дан 1 December 2019 в 23:31
поделиться

Вот один способ:

.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
ответ дан 1 December 2019 в 23:31
поделиться

Если это 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
2
ответ дан 1 December 2019 в 23:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: