2015-06-22 2 views
0

Обычно мы имеем это в MakefileПравило делают за многословие

%.o:%.c 
    $(cc) $(flags) -o [email protected] -c $< 

Когда количество флагов огромна, я чувствую себя лучше, чтобы написать это вместо того, чтобы

%.o:%.c 
    $(info $(cc): $< --> [email protected]) 
    @$(cc) $(flags) -o [email protected] -c $< 

Однако это может быть полезно когда-нибудь все увидит. Таким образом, я определил переменную для этого:

[email protected] 

%.o:%.c 
    $(info $(cc): $< --> [email protected]) 
    $(at)$(cc) $(flags) -o [email protected] -c $< 

Мой вопрос заключается в том, как правильно, легко установить или сбросить $(at) из командной строки. Я вижу два решения:

$ make verbose all 
$ make verbose=1 all 

С первым решением я хотел бы сделать это

ifeq (,$(filter verbose,$(MAKECMDGOALS))) 
[email protected] 
dummy:=$(filter-out verbose,$(MAKECMDGOALS))) 
endif 

Со вторым я мог бы сделать это

ifeq (,$(filter 1,$(verbose))) 
[email protected] 
endif 

ли оба решения приемлемы, или я могу сделать лучше ?

ответ

2

я вообще настроить свои мейкфайлы так:

  • Рецепт линии, которые я знаю, я никогда не хочу видеть команды сообщенные начинаются с @ (как правило, это просто какие-echo заявления или другие аналогичные мета-заявления).
  • Все остальные линии рецептов НЕ имеют префикс @.
  • Я добавлю .SILENT: psuedo-target, чтобы сделать вывод тихом по умолчанию.
  • I префикс (или суффикс) .SILENT: psuedo-target с переменной ссылкой, например $V.

Так, что-то вроде этого:

%.o: %.c 
     @echo '$(cc): $< --> [email protected]' 
     $(cc) $(flags) -o [email protected] -c $< 

$V.SILENT: 

Теперь по умолчанию V не установлен, поэтому последняя строка расширяется до .SILENT special target и никаких команд рецепта не показаны. Если я запустил make V=1 (или любое другое значение), то цель будет расширяться до 1.SILENT:, которая ничего особенного не делает, и поэтому по существу игнорируется, и все мои команды, которые НЕ префиксны с @, печатаются.

+0

Отлично, это именно то, что я искал. Благодарю. – nowox

Смежные вопросы