Рендеринг make-файла определяет - PullRequest
0 голосов
/ 20 октября 2018

Можно ли сделать make-файл?

У меня сложный make-файл с включениями, и мне нужно его отладить.Когда я набираю make -f test.mk и нажимаю клавишу Tab, он показывает все доступные цели, включая те, которые были объявлены динамически.

Это означает, что make может очень быстро рендерить make-файлы, поэтому я спрашиваю, возможно ли эточтобы сохранить обработанный файл где-нибудь.

Пример Makefile:

define define_target
$(eval _target_name := $(1))
$(info Defining a target: $(_target_name))
$(_target_name):
    @echo $(_target_name) triggererd.
endef

$(eval $(call define_target,test))
$(eval $(call define_target,echo))

all: test
all: echo
all:
    @echo Done!

В терминале:

peter@peterpc:~/test$ make  # Double Tab pressed here to trigger autocompletion
all   echo  test            # All targets except the "all" were defined dynamically!
peter@peterpc:~/test$ make all
Defining a target: test
Defining a target: echo
test triggererd.
echo triggererd.
Done!

Желаемый вывод:

test:
    @echo test triggered.

echo:
    @echo echo triggered.

all: test
all: echo
all:
    @echo Done!

1 Ответ

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

Средство заполнения вкладок напрямую не предоставляется make.Кто-то создал скрипт bash, который сделает это за вас ... это входит в пакет bash_completion.То, что делает это завершение, вызывает make с опциями -p, -n и -q, а затем анализирует выходные данные, чтобы найти имена целей.

Таким образом, вкратце, вы можете "визуализировать""make-файл (для некоторого определения этого), запустив make -npq и глядя на вывод.Имейте в виду, что это не будет похоже на вывод препроцессора, где он показывает ваш точный make-файл с расширенными переменными и т. Д., Но в остальном идентичен.Это будет дамп внутренних структур данных make после того, как весь синтаксический анализ будет завершен (хотя и будет напечатан в формате, подобном makefile).

...