Soru Neden bir kabuk betiğini kullanalım?


Bana sadece komut satırı argümanlarının biraz daha kolay ele alınmasını sağlayan bir kabuk betiği gibi görünün.

./Make.sh yerine make çalıştırmak için standart neden


72
2017-09-26 15:52


Menşei




Cevaplar:


Genel fikir şu ki make En az yeniden yapılanmaları destekler (makul olarak) - yani, programınızın hangi bölümlerinin diğer bölümlere bağlı olduğunu söylersiniz. Programın bazı bölümlerini güncellediğinizde, bir tek Buna bağlı parçaları yeniden oluşturur. Sen varken could Bunu bir kabuk betiği ile yapın, bir çok Daha fazla çalışma (tüm dosyalar üzerinde son değiştirilen tarihleri ​​açıkça kontrol etmek vb.) Bir kabuk senaryosundaki tek açık alternatif, her zaman her şeyi yeniden inşa etmektir. Küçük projeler için bu kesinlikle makul bir yaklaşımdır, ancak büyük bir proje için tam bir yeniden inşa işlemi bir saat veya daha fazla zaman alabilir - makeAynı şeyi bir veya iki dakikada kolayca başarabilirsin ...


81
2017-09-26 16:05





Yapmak bir uzman sistem

Kabuk betikleri ile yapmak zor olan çeşitli şeyler var ...

  • Tabii ki, sadece ne yapması gerektiğini inşa etmek için, ne güncel olduğunu görmek için denetler.
  • Bir gerçekleştirir topolojik sıralama veya herhangi bir önkoşulun her bağımlılıktan önce inşa edildiği ve sadece bir kez inşa edildiği şekilde, güncel olmayan şeyleri inşa etmek için ne ve hangi düzene bağlı olduğuna karar veren başka bir tür ağaç analizi.
  • Bu bir dil bildirimsel programlama. Yeni elemanlar, onları zorunlu bir kontrol akışına birleştirmeye gerek kalmadan eklenebilir.
  • Bu içerir bir çıkarım motoru kuralları, kalıpları ve tarihleri ​​işlemek ve bu, Makefile'deki kurallarla birleştirildiğinde, uzman sistem.
  • Bir makro işlemcisi var.
  • Ayrıca bakınız: önceki bir özet.

45
2017-09-26 16:17



Yine de uzman bir sistem olarak oldukça sınırlı. Örneğin. Her çıkarım aynı kuralı yalnızca bir kez kullanabilir. - reinierpost
Sadece 2 numaralı noktaya değinmek gerekirse, daha çok katmanlı mühendislik terimlerinde, bir kabuk betiği doğrusal bir düzeni zorlar, oysa makefile ağaç gibidir. Gereksiz kronolojik bağımlılıkları ortadan kaldırır (pratikte make işlemi doğrusal olarak yürütülür). - Sridhar-Sarnobat
... Ben Makefiles ile kabuk betikleri üzerinde sorun bence javascript üzerinde CSS ile sorun olduğunu düşünüyorum. Her düğümün hangi kronolojik düzende gerçekleştiğine neredeyse belli değil. En azından Makefile'lerle gerçek kabuk komutunu görmeye devam edersiniz. Hatta CSS ile soyutlanmış durumda. - Sridhar-Sarnobat
Birisi onları açıklığa kavuşturduğunda takdir ettiğim birkaç yorumum var. 1 / İlk ve iki noktanız o değil, yani topolojik sıralama, artan yapının nasıl uygulandığıdır? 2 / fonksiyon kompozisyonunu kullanarak uygulanan 3 numaralı noktayı işaretleyemezsiniz. 3 / MakeFile son kullanıcısı için 4 ve 5 avantajları hakkında daha fazla bilgi edinmek istiyorum ve bu avantajların neden kabuk komutlarını bir araya getirerek gerçekleştirilemediğini anlamak istiyorum. - Amine Hajyoussef
Bu, Uzman Sistem olarak tarif edilen ilk kez karşılaşıyorum. Uzman sistemler üreten biri olarak, benim düşüneceğim bir şey değil. Açıkça, makefile'de belirtilen bildirimsel kurallar aracılığıyla programınızı nasıl oluşturacağınızı anlamaya yönelik bir çıkarım motoru vardır, ancak (yaprak) kurallar gerçeklerden ziyade yürütülmesi gereken kabuk komutları olduğu için bilgi tabanlı bir sistem olduğundan daha az açıktır. Ve "uzman sistem" terimi, dünya standartlarında bir uzmanın uzmanlığını başarıyla yakalayan bir sisteme başvurmak için kullanılır; Jüri hala benim için dışarıda. - Dennis


Kaynak dosyalarınızda değişiklik yaptığınızda yalnızca gerekli dosyaların yeniden derlenmesini sağlayın.

Ö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

Dosyayı değiştirirsem 2.h sadece & çalıştır makeTersine sırayla tüm 3 komutu yürütür.

Dosyayı değiştirirsem 1.c sadece & çalıştır makeSadece ilk 2 komutu ters sırada yürütür.

Bunu kendi kabuk senaryonuzla başarmaya çalışmak çok fazla if/else kontrol etme.


7
2017-09-26 16:10



ya da böyle bir şey kullan rsync -r -c -I $SOURCE $DEST_DIR kabuğunda. - Spartacus9


Yukarıdakilerin yanı sıra, Make bir bildirimsel (-ish) paralel programlama dilidir.

Diyelim ki dönüştürmek için 4,000 grafik dosya ve 4 CPU'unuz var. CPU'larınızı doyururken güvenilir bir şekilde yapacak olan 10 satırlık bir kabuk komut dosyası (burada cömert davranıyorum) yazmayı deneyin.

Belki de asıl soru, insanlar neden kabuk betikleri yazmayı rahatsız ediyorlar.


7
2017-10-01 17:53



Evet, toplam doğrusal siparişi daha fazla ağaç benzeri bir siparişe dönüştürüyorsunuz. - Sridhar-Sarnobat


tutamak bağımlılıkları yapmak: makefile bunları açıklar: ikili 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, dosyaların tarihi yeniden derlenecek olanı belirlemek için karşılaştırılır .

Makefile'de tarif edilen herşeyi inşa etmemek için doğrudan bir hedefe başvurabiliriz.

Ayrıca, söz dizimi, ikame, vpath sağlar

Bunların hepsi, sahip olduğunuzla birlikte kabuk betikleriyle yazılabilir.


3
2017-09-26 16:09