.PHONY GNU'daki tüm kurallar dosya oluşturur mu?


18

Yorumumda, kural koymadan önce sadece ilk önce koymam gerektiği konusunda yanlış mıyım:

.PHONY: all of my rules

all:
    echo "Executing all ..."

of:
    echo "Executing of ..."

my:
    echo "Executing my ..."

rules:
    echo "Executing rules ..."

Bu 'formülü' izlemek istemeyeceğiniz bir durum var mı?

http://www.gnu.org/software/make/manual/make.html#Phony-Targets

Yanıtlar:


24

Clark Grubb'un Makefile stil rehberi şunları önerir:

  • Tüm sahte hedefler .PHONY'nin önkoşulları haline getirilerek açıklanmalıdır.
  • her sahte hedefi, tüm sahte hedefleri tek bir yerde listelemek yerine, hedef bildirimden hemen önce .PHONY önkoşulu olarak ekleyin.
  • Hiçbir dosya hedefi .PHONY için önkoşul olmamalıdır.
  • sahte hedefler, dosya hedeflerinin önkoşulu olmamalıdır.

Örneğin, bu şu anlama gelir:

.PHONY: all
all:
    echo "Executing all ..."

.PHONY: of
of:
    echo "Executing of ..."

.PHONY: my
my:
    echo "Executing my ..."

.PHONY: rules
rules:
    echo "Executing rules ..."

Birden çok PHONYhedefe izin verilir; ayrıca şu Yığın Taşması sorusuna da bakın: "Bir gnu makefile içinde birden çok .PHONY hedefi olabilir mi?"

Ayrıca, bu doğrudan sorunuzda belirtilmemiş olsa PHONYda, projenizde gerçek bir girdi veya ara dosyaların adıyla aynı hedefe sahip olmamasına dikkat edilmelidir . Örneğin, projeniz varsayımsal olarak rules(sonek olmadan) adlı bir kaynak kodu dosyasına sahipse , bu dizenin bir PHONYhedefe dahil edilmesi beklenen makedavranışı bozabilir .


1
stil rehberi mükemmel payı. teşekkür ederim.
tarabyte

2

Bence iyi bir uygulama ama bunu parçalamak ve tam kural tarifleri gmake'imde de çalıştıktan sonra bile parçaları koymak (3.81):

Örneğin:

#Makefile
all:
   @echo hello world
.PHONY: all

CMD:

$ touch all
$ make all    #this would be a no-op if all weren't a phoney target
  hello world 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.