Глобальная предпосылка в GNU make - возможно ли это - PullRequest
0 голосов
/ 09 октября 2018

У меня есть Makefile с тоннами целей, и я хотел бы, чтобы сначала выполнялся определенный скрипт, независимо от того, какая цель вызывается.Мне нравится называть это глобальным предварительным условием.

Я не хочу создавать цель для сценария и устанавливать ее в качестве предварительного условия для всех существующих целей (которых, как я сказал, немало).Кроме того, кто-то еще может добавить цель в будущем и не добавлять мой сценарий в качестве предварительного условия для своей цели, поэтому глобальное предварительное условие позаботится об этом.

Предоставляет ли GNU-make средство для достижения этой цели?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Другой подход:

-include dummy

.PHONY: dummy
dummy:
    run-the-script

Make всегда будет пытаться перестроить любой файл, который пытается включить make-файл (если он устарел или не существует).В этом случае такого файла нет, и правило его построения запускает скрипт и больше ничего не делает.

0 голосов
/ 10 октября 2018

Существует решение без изменения существующего Makefile (основное отличие от ответов, указанных в tripleee).Просто создайте makefile, содержащий:

.PHONY: all

all:
    pre-script
    @$(MAKE) -f Makefile --no-print-directory $(MAKECMDGOALS) MAKE='$(MAKE) -f Makefile'
    post-script

$(MAKECMDGOALS): all ;

Единственным недостатком является то, что пре- и постскрипты будут выполняться всегда, даже если делать больше нечего.Но они не будут запущены, если вы вызовете make с одним из параметров --dry-run (другое отличие с ответами, указанными tripleee).

...