Що роблять @, - і + як префікси до рядків рецептів у Make?


172

У посібнику з GNU Makefile згадуються ці префікси.

Якщо надається .ONESHELL, то лише перший рядок рецепту перевірятиметься на особливі символи префікса ("@", "-" та "+").

Що роблять ці префікси та де вони згадуються?

Відповіді:


235

Вони контролюють поведінку make для тегів командних рядків:

  • @ пригнічує нормальне «відлуння» команди, яка виконується.

  • - означає ігнорувати стан виходу команди, яка виконується (як правило, ненульовий статус виходу зупинить цю частину збірки).

  • +означає 'виконати цю команду під make -n' (або 'make -t' або 'make -q'), коли команди зазвичай не виконуються. Дивіться також специфікацію POSIX для, makeа також § 9.3 посібника GNU Make.

+Запис являє собою (POSIX-стандартизовані) узагальнення де факто (не стандартизовані) механізму , за допомогою якого командного рядка , що містить ${MAKE}або $(MAKE)виконується під make -n.

( @обговорюється в §5.2 посібника з виготовлення GNU; -описано в § 5.5 ; в пункті 5.7.1 згадується використання +.)


41

@не дозволяє командному рядку відлунювати до консолі. Ви можете зробити це в усьому світі за допомогою -sабо--keep-silent

-повідомляє make продовжувати, навіть якщо команда з якоїсь причини відмовиться. Ви можете зробити це в усьому світі за допомогою -iпрапора (або --ignore-errors).

+Я не був знайомим, перш ніж ти запитав. Наскільки я можу сказати, що зводить на немає ефект -n, -tі -q, всі з яких в основному говорять зробити насправді не запускати команди. Таким чином, лінія з +фронтом хотіла б пробігти все одно.

Якщо ви читаєте офіційний посібник з Gnu Make, всі вони згадуються у розділі 5 . У моєму старовинному примірнику посібника, який був розділом про "команди", але термін du jour зараз, здається, "рецепти".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.