Несколько респондентов предложили использовать make -pn
, который напечатает базу данных правил, но не выполнит ничего - более или менее. Проблема с этим подходом состоит в том, что -n
по-прежнему вызывает все рекурсивные операции, и он по-прежнему выполняет гораздо больше работы, чем необходимо, поскольку он печатает каждую команду, которую он вызвал бы в обычной сборке. Более эффективным решением было бы создать тривиальный make-файл dummy.mk со следующим содержимым:
__all_targets__: ; #no-op
Теперь вызовите make как make -p -f Makefile -f dummy.mk __all_targets__
. На любой существенной сборке разница в количестве продукции, генерируемой make, значительна. Например:
$ gmake -pn | wc
138985 2632330 69612711
$ gmake -f Makefile -f /tmp/dummy.mk -pn __all_targets__ | wc
21673 93437 878985
Время выполнения также было значительно лучше - 2,063 с для первой версии, 0,059 с для второй.