Apa yang dilakukan @, - dan + sebagai awalan untuk membuat resep baris di Make?

172

Di manual GNU Makefile, ia menyebutkan awalan ini.

Jika .ONESHELL disediakan, maka hanya baris pertama resep yang akan diperiksa untuk karakter awalan khusus ('@', '-', dan '+').

Apa yang dilakukan awalan ini, dan di mana mereka disebutkan?

Matt Joiner
sumber

Jawaban:

235

Mereka mengontrol perilaku make untuk baris perintah yang ditandai:

  • @ menekan 'gema' normal dari perintah yang dieksekusi.

  • - berarti mengabaikan status keluar dari perintah yang dieksekusi (biasanya, status keluar yang tidak nol akan menghentikan bagian pembangunan itu).

  • +berarti 'jalankan perintah ini di bawah make -n' (atau 'make -t' atau 'make -q') ketika perintah biasanya tidak dieksekusi. Lihat juga spesifikasi POSIX untuk makedan juga §9.3 dari manual GNU Make.

The +notasi adalah (POSIX-standar) generalisasi dari de facto (non-standar) mekanisme dimana baris perintah yang mengandung ${MAKE}atau $(MAKE)dijalankan di bawah make -n.

( @dibahas dalam §5.2 dari manual GNU Make; -dijelaskan dalam §5.5 ; dan §5.7.1 menyebutkan penggunaan +.)

Jonathan Leffler
sumber
41

@mencegah baris perintah bergema ke konsol. Anda dapat melakukannya secara global dengan -satau--keep-silent

-memberitahu make untuk terus berjalan, meskipun perintah gagal karena suatu alasan Anda dapat melakukannya secara global melalui -iflag (atau --ignore-errors).

+Saya tidak familar dengan sebelum Anda bertanya. Sebagai dekat yang saya tahu, itu meniadakan efek -n, -tdan -q, semua yang pada dasarnya memberitahu make untuk tidak benar-benar menjalankan perintah. Jadi garis dengan +di depan akan tetap dijalankan.

Jika Anda membaca manual resmi Gnu Make, semuanya disebutkan dalam Bab 5 . Dalam salinan lama saya dari manual yang merupakan bab tentang "perintah", tetapi istilah du jour sekarang tampaknya menjadi "resep".

TED
sumber