Что означает@: (at symbol colon) в файле Makefile?


что делает следующее В файле Makefile?

rule: $(deps)
    @:

Я не могу найти это в руководстве по изготовлению.

2 112

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
    @: