игнорирование символа (@) в make-файлах - PullRequest
11 голосов
/ 05 октября 2010

В make-файлах строка с префиксом at 100 * * отключает печать вывода .У меня есть make-файл, где каждая строка имеет префикс at, но для отладки мне нужно посмотреть, что происходит.Есть ли способ сказать make игнорировать at и выводить строку?отладка избыточна, и опция -n печатает их, но ничего не делает (это для пробного запуска)

Ответы [ 6 ]

16 голосов
/ 05 октября 2010

Создайте переменную со значением по умолчанию @:

AT := @

И затем используйте это в вашем Makefile:

foo:
    $(AT)fooc -o $@

Затем запустите make какmake AT=.Вы можете стать более изумительным, если захотите:

V := 0
AT_0 := @
AT_1 :=
AT = $(AT_$(V))

Это заставит команды молчать, если V не установлен на 1 (например, make V=1).При этом используется не POSIX, но общая функция расширения рекурсивных переменных.

7 голосов
/ 05 октября 2010

Вы можете сделать так, чтобы кто-то еще заставил печатать команды во время их выполнения, что очень похоже на то, что

make SHELL='/bin/sh -x' ...your make arguments...

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

В качестве альтернативы, вы могли бы фактически воспользоваться преимуществамиСвободное программное обеспечение GNU Создайте и взломайте свою собственную версию, которая игнорирует знаки @.Очистка исходного кода GNU Make для COMMANDS_SILENT скоро покажет вам, что достаточно добавить 1 || к условию ?: в аргументах вызова message() в start_job_command() в job.c .Работа выполнена!

2 голосов
/ 22 июля 2011

Выньте все @ и добавьте эту строку в Makefile:

.SILENT:

Когда вы хотите отладить, закомментируйте строку .SILENT.

2 голосов
/ 05 октября 2010

В GNU Make это невозможно из коробки.Наличие Makefile, которое не может быть сконфигурировано абсолютно бесшумно, - просто плохая практика.Удаление знаков @ и запуск с помощью -s - это самый простой способ получить автоматическую сборку (за исключением возможных команд echo).

0 голосов
/ 27 июня 2012

Чтобы сделать вещи еще более настраиваемыми, включите переключатель make, чтобы включить многословие. По умолчанию это нормальный или тихий режим. Конечно, только в режиме -e VERBOSE = 1 он будет многословным:

##
# Verbose ENABLE/DISABLE
# invoke make -e VERBOSE=1
##
V=@
ifeq ($(VERBOSE),1)
    V=
endif   

all:
    $(V)echo test
    echo test

Спасибо за эту тему, она очень помогла моей работе.

0 голосов
/ 16 марта 2012

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

test:
    @blah; \
    : ... lots of script commands ... ; \
    : Start debugging here ; \
    set -x; \
    : ... script segment to debug ... ; \
    set +x; \
    : Stop debugging here ; \
    : ... lots of script commands ... ;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...