Make bana, komut satırı argümanlarının biraz daha kolay işlendiği bir kabuk betiği gibi görünüyor.
./Make.sh yerine make çalıştırmak neden standart?
Make bana, komut satırı argümanlarının biraz daha kolay işlendiği bir kabuk betiği gibi görünüyor.
./Make.sh yerine make çalıştırmak neden standart?
Yanıtlar:
Genel fikir, make
(makul olarak) minimum yeniden yapılandırmaları desteklemektir - yani, programınızın hangi bölümlerinin diğer bölümlere bağlı olduğunu söylersiniz. Programın bir bölümünü güncellediğinizde, yalnızca buna bağlı olan parçaları yeniden oluşturur. Bunu bir kabuk betiği ile yapabilseniz de, çok daha fazla iş olacaktır (tüm dosyalardaki son değiştirilmiş tarihleri açıkça kontrol etmek, vb.) Bir kabuk betiğinin tek bariz alternatifi, her seferinde her şeyi yeniden oluşturmaktır. Küçük projeler için bu tamamen makul bir yaklaşımdır, ancak büyük bir proje için tam bir yeniden inşa işlemi kolayca bir saat veya daha fazla sürebilir - kullanarak make
, aynı şeyi bir veya iki dakika içinde kolayca başarabilirsiniz ...
Muhtemelen, en azından genel olarak benzer yeteneklere sahip olan birkaç alternatif olduğunu da eklemeliyim. Özellikle büyük bir projede yalnızca birkaç dosyanın yeniden oluşturulduğu durumlarda, bazıları (örneğin Ninja ) genellikle yapmaktan çok daha hızlıdır.
Kabuk komut dosyalarıyla yapılması zor olan çeşitli şeyler vardır ...
Make, kaynak dosyalarınızda değişiklik yaptığınızda yalnızca gerekli dosyaların yeniden derlenmesini sağlar.
Örneğin:
final : 1.o 2.o
gcc -o final 1.o 2.o
1.o : 1.c 2.h
gcc -c 1.c
2.o : 2.c 2.h
gcc -c 2.c
2.h
Yalnızca dosyayı değiştirir ve çalıştırırsam make
, 3 komutu da ters sırada yürütür.
1.c
Yalnızca dosyayı değiştirir ve çalıştırırsam make
, yalnızca ilk 2 komutu ters sırada yürütür.
Bunu kendi kabuk betiğinizle başarmaya çalışmak çok fazla if/else
kontrol gerektirecektir .
rsync -r -c -I $SOURCE $DEST_DIR
kabukta kullanın.
Yukarıdakilerin yanı sıra, Make bildirim temelli (-ish) bir paralel programlama dilidir.
Diyelim ki dönüştürülecek 4.000 grafik dosyanız ve 4 CPU'nuz var. CPU'larınızı doyururken güvenilir bir şekilde yapacak 10 satırlık bir kabuk betiği yazmayı deneyin (burada cömert davranıyorum).
Belki de asıl soru, insanların neden kabuk komut dosyaları yazmakla uğraştıklarıdır.
tutamaç bağımlılıkları yap: makefile bunları açıklar: ikili dosya, nesne dosyalarına bağlıdır, her nesne dosyası bir kaynak dosyaya ve başlıklara bağlıdır ... make çalıştırıldığında, nelerin yeniden derlenmesi gerektiğini belirlemek için dosyaların tarihi karşılaştırılır .
Makefile'da açıklanan her şeyi oluşturmamak için doğrudan bir hedef çağırılabilir.
Üstelik make sözdizimi ikame sağlar, vpath
Bunların hepsi, zaten sahip olduğunuz make ile kabuk betiklerinde yazılabilir.