Есть ли способ получить получившийся Makefile после включений? - PullRequest
0 голосов
/ 26 июня 2018

В Makefile (GNU) можно сделать:

include foo.mk

all:
    @echo "Hello, world!"

Есть ли способ заставить make выплюнуть Makefile после включения foo.mk?Аналогично тому, как препроцессор C расширил макросы и т. Д .?

Обновление: нижеприведенный комментарий попросил меня указать, какую проблему я пытаюсь решить.Я хочу инициировать перестройку, когда / если есть изменения в Makefile и / или базовых включенных make-файлах.Я нашел рецепт, который выглядит примерно так:

.PHONY: bar

SHAFILE := foobar.sha256
$(SHAFILE): bar
    @sha256sum Makefile | cmp -s - $@ || sha256sum Makefile > $@

...

%.o: %.c $(SHAFILE)
$(CC) -c -o $@ $< $(CFLAGS)

(Очевидно, контрольная сумма должна быть из Makefile, включая включает в себя, но это начало.)

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Предостережение: я не пробовал этого, только прочитал руководство.

После всех ваших include строк (включая переходный набор вложенных включений и даже строк, созданных подстановкой текста или созданных функциями) переменная Make MAKEFILE_LIST будет ссылаться на все ваши make-файлы.

Таким образом, этого должно быть достаточно для добавления зависимости в конец вашего файла, например

%.o: $(MAKEFILE_LIST)

Вы не делаетена самом деле нужно содержимое эффективного Makefile, просто список файлов, которые его составляют.

0 голосов
/ 26 июня 2018

Есть ли способ заставить make выплюнуть Makefile после включения foo.mk?

Нет.

Есть gmake -d с тоннойвывода отладки, некоторые из которых указывают, какие make-файлы читаются:

$ gmake -d|grep Reading
Reading makefiles...
Reading makefile `GNUmakefile'...
Reading makefile `foo.mk' (search path) (no ~ expansion)...

Это может быть полезно, если есть рекурсивные директивы include или те, которые находятся в условных выражениях.

Возможно, вы могли бы сообщить нам свойактуальная проблема, которую вы хотите решить?

...