Makefile'da "hepsi" ne anlama geliyor?


105

Makefiles ile ilgili bazı öğreticiler okudum, ancak benim için "tümü" nün ne anlama geldiği ve ne işe yaradığı hala net değil.

Herhangi bir fikir?

Yanıtlar:


116

Makefile'ın anladığı gibi bir yapı birçok hedeften oluşur. Örneğin, bir proje oluşturmak için ihtiyacınız olabilir

  1. File1.c dosyasından file1.o oluşturun
  2. File2.o dosyasını file2.c dışında derleyin
  3. File3.o dosyasını file3.c dışında derleyin
  4. File1.o ve file3.o'dan yürütülebilir1 derleyin
  5. File2.o dışında yürütülebilir2 derleyin

Bu iş akışını makefile ile uyguladıysanız, her bir hedefi ayrı ayrı yapabilirsiniz. Örneğin, yazdıysanız

make file1.o

sadece gerekirse bu dosyayı oluşturur.

Adı allsabit değil. Bu sadece geleneksel bir isim; alltarget, eğer onu çağırırsanız, make'in tam bir yapı oluşturmak için gereken her şeyi yapacağını belirtir . Bu genellikle herhangi bir dosya oluşturmayan, yalnızca diğer dosyalara bağlı olan kukla bir hedeftir. Yukarıdaki örnek için, tüm gerekli olanı oluşturmak yürütülebilir dosyalar oluşturmaktır, diğer dosyalar bağımlılık olarak çekilir. Makefile'da şöyle görünür:

all: executable1 executable2

alltarget genellikle makefile'da ilktir, çünkü sadece makekomut satırında hedefi belirtmeden yazarsanız , ilk hedefi oluşturur. Ve olmasını bekliyorsunuz all.

allgenellikle aynı zamanda bir .PHONYhedeftir. Buradan daha fazlasını öğrenin .


31

GNU Make için manuel için açık bir tanım getirmekte allonun içinde standart hedeflerin listesinden .

Makefile'ın yazarı bu kuralı takip ediyorsa hedef allşunları yapmalıdır:

  1. Tüm programı derleyin, ancak belgeleri oluşturmayın.
  2. Varsayılan hedef olun. Koşarken olduğu gibi sadece makeaynı şeyi yapmalı make all.

1'e ulaşmak all, tipik olarak .PHONY, tüm programı oluşturan çalıştırılabilir dosyalara bağlı bir hedef olarak tanımlanır :

.PHONY : all
all : executable

2'ye ulaşmak all, ya yapım dosyasında tanımlanan ilk hedef olmalı ya da varsayılan hedef olarak atanmalıdır:

.DEFAULT_GOAL := all

3

Özel bir şey ifade ettiğinden emin değilim. Bu sadece bir 'hepsi' kuralı sağladığınız bir konvansiyondur ve genellikle tüm projeyi inşa etmek için gereken tüm alt hedefleri listelemek için kullanılır, dolayısıyla 'hepsi' adı. Bununla ilgili özel olan tek şey, çoğu zaman insanların bunu makefile'a ilk hedef olarak koymasıdır, bu da sadece 'make' yazmanın 'tümünü yap' ile aynı şeyi yapacağı anlamına gelir.


2

Hedef "tümü", sahte bir hedef örneğidir - diskte "tümü" olarak adlandırılan hiçbir şey yoktur. Bu, bir "hepsini yap" yaptığınızda, make'in her zaman onu inşa etmesi gerektiğini düşündüğü ve böylece o hedef için tüm komutları çalıştırdığı anlamına gelir. Bu komutlar tipik olarak makefile'ın bildiği tüm son ürünleri oluşturan komutlar olacaktır, ancak her şeyi yapabilir.

Diğer kukla hedef örnekleri "temiz" ve "kurulumdur" ve aynı şekilde çalışırlar.

Henüz okumadıysanız , aynı zamanda mükemmel bir öğretici olan GNU Make Manual'ı okumalısınız .

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.