Что делает следующее в Makefile?
rule: $(deps)
@:
Я не могу найти это в руководстве по сборке.
Это означает «не отображать эту команду на выходе». Таким образом, это правило гласит «выполнить команду оболочки :
и не отображать вывод.
Конечно, команда оболочки :
не работает, поэтому здесь говорится: «ничего не делай и не говори».
Зачем?
Хитрость в том, что у вас есть неясная комбинация двух разных синтаксисов. Макияж (1) синтаксис является использование действия , начиная с @, который просто не повторить команду. Так что правило как
always:
@echo this always happens
не будет излучать
echo this always happens
this always happens
Теперь частью действия правила может быть любая команда оболочки, в том числе :
. Справка Bash объясняет это так же, как и везде:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
@:
(а не только@
), то в дополнение к ответу @ guestolio это также может быть оставшаяся заглушка от разработки. Это похоже на написание в Python функции, которая содержит толькоpass
. Это может быть полезно для создания заглушек блоков кода для копирования / вставки, но обычно они не должны существовать долго. При такой обработке файл все равно будет компилироваться, проходить линтинг и т. Д.Для тех, кто интересуется, почему вы можете сделать это, полезно, если вы хотите притвориться, будто что-то было сделано, так что Make не выводит «Ничего не будет сделано» для вашей цели.
Один пример - если у вас есть фальшивая цель, которую вы всегда выполняете, и в ней у вас есть куча условных выражений в команде. Вы хотите иметь хоть что-то, если эти условия окажутся ложными и ничего не будет сделано.
Например (из скриптов Linux / Makefile.clean):
источник