Bir Red Hat çalışanı, Hedefler montaj sistemini tanıttı. GNU Make 4.2'nin Sürümü
Richard WM Jones, yazar libguestfsRed Hat'ta çalışıyor gönderilen yeni montaj yardımcı programı Goller, komut dosyalarının genel basitliğini ve anlaşılırlığını korurken, markanın kullanışlılığındaki eksiklikleri ve sorunları ortadan kaldırmayı amaçladı. Make yardımcı programı 1976 yılında tasarlandı ve bir takım kavramsal eksikliklere sahip; Goals, genel konsepti değiştirmeden bu eksiklikleri gidermeyi planlıyor.
Hedeflerin kaynak kodu tarafından dağıtıldı GPLv2+ kapsamında lisanslanmıştır.
Yalnızca bir bağımlılık çözümleme taktiği desteği - "hedef dosya eksikse veya bağımlılıklardan birinden daha eskiyse derleme talimatı çalıştırılır." Goals, bir URL'nin varlığını kontrol etmek, değişiklik zamanlarını herhangi bir dosyayla karşılaştırmak, paket yapısını değerlendirmek gibi diğer taktikleri uygulamayı planlıyor Koji, sağlama toplamlarının karşılaştırılması, test senaryolarının seçici olarak test atlanmasıyla çalıştırılması.
Derleme hedeflerini işlerken make, dosyaları ve kural adlarını ayırmaz ve sonuç olarak, bir kural çalıştırılırken oluşturulduğunu iddia ettiği dosyanın gerçekten oluşturulup oluşturulmayacağına dair bir kontrol yoktur. Örneğin, testlerle birlikte komut dosyaları çalıştıran "test" adlı bir kuralınız varsa, yanlışlıkla "test" adlı bir dosya oluşturulursa make, hedefin oluşturulduğunu ve test gerektirmediğini dikkate alacağından testler artık çağrılmaz. herhangi bir eylem (make'deki sorunu çözmek için “.PHONY: test” yönergesini belirtebilirsiniz). Hedefler, dosyaları ve kural adlarını açıkça ayırır.
Montaj talimatları için yalnızca bir parametre sağlama sorunu.
Hedefler, isteğe bağlı sayıda adlandırılmış parametre kullanmanıza olanak tanır. Örneğin, bir hata ayıklama dosyasının işaretini addan ayrı olarak çıkarabilirsiniz:
Kabuk yorumlayıcısıyla etkileşimde sorunlar. Örneğin, dosya ve dizin adlarındaki boşlukların kontrol edilmesi ihtiyacı, her komut çalıştırılırken ayrı bir kabuk yorumlayıcısının başlatılmasıyla kaynak israfı, "$" karakterinin çift yorumlanması (hem kabukta hem de make'de kullanılır), girintileri dikkate alarak.
Bu sorunlar, Hedefler'de, derleme değişkenleri için "$" yerine "%" simgesinin kullanılmasıyla ("$" yalnızca kabuk için kalır), bir ayrıştırıcı kullanılarak çözülür. LALR(1)yolları ve dosya adlarını tırnak işaretleri içine almanızı ve kod bloklarını küme parantezleriyle vurgulamanızı gerektirir. Komut bloğunun tamamı, komut kabuğunun bir örneğinde başlatılır ve blok içinde, özel boşluklara atıfta bulunulmadan isteğe bağlı kod biçimlendirmesine izin verilir.
İki başlatma modu: derleme hedeflerini dosya adlarıyla eşleştirmek için yapma modu (örneğin, "foo.o" dosyası "%name.o" hedefiyle eşleşir) ve doğrudan derleme modu:
tüm hedef = : bağlantı
hedef bağlantısı =
"hedef" : "foo.o", derleme ("bar") { ... }
Montaj taktikleri, bir toplanma hedefinin yeniden bir araya getirilmesi ihtiyacını belirlemek için kullanılabilecek özel kurallarla belirlenir. Bir dosyanın varlığına bir bağlantı yapılırsa, bu, ilgili işaret (kural adı için "hedef") ve dosyayı kontrol etmek için *dosya ("hedef") aracılığıyla açıkça belirlenir.