Что означает@: (at symbol colon) в файле Makefile?
что делает следующее В файле Makefile?
rule: $(deps)
@:
Я не могу найти это в руководстве по изготовлению.
2 ответа:
это означает "не повторяйте эту команду на выходе."Итак, это правило говорит:" выполните команду оболочки
:
и не повторить выход.конечно же команда оболочки
:
это не-ОП, так что это говорит: "ничего не делай, и не говори."почему?
фокус здесь в том, что у вас есть неясная комбинация двух разных синтаксисов. Элемент make (1) синтаксис-это использование действия, начинающегося с@, которое просто не повторять команду. Так что правило вроде
always: @echo this always happens
не выделяет
echo this always happens this always happens
теперь, действие часть правила может быть любой командной оболочки, в том числе
:
. Баш помощь объясняет это, а также в любом месте:$ help : :: : Null command. No effect; the command does nothing. Exit Status: Always succeeds.
для тех, кому интересно, почему вы можете это сделать, полезно, если вы хотите притвориться, что что-то было сделано, так что Make не выводит "ничего не нужно делать" для вашей цели.
один пример - если у вас есть фальшивая цель, которую вы всегда выполняете, и в ней у вас есть куча условных выражений в команде. Вы хотите иметь хотя бы что-то на случай, если эти условия окажутся ложными и ничего не будет сделано.
например (из Linux скрипты/файлы Makefile.чистый):
__clean: $(subdir-ymn) ifneq ($(strip $(__clean-files)),) +$(call cmd,clean) endif ifneq ($(strip $(__clean-dirs)),) +$(call cmd,cleandir) endif ifneq ($(strip $(clean-rule)),) +$(clean-rule) endif @: