+1, "Birçok, ve onlar korkunç."
Ancak, "en zengin" ve "en ölçeklenebilir" muhtemelen bir Makefile-üreteci olan CMake'dir (ayrıca doğal MSVC ++ *.proj
/ üretir *.sln
). Tuhaf sözdizimi, ancak bir kez öğrendikten sonra, farklı platformlar için güzel yapılar oluşturmanıza izin verebilir. Eğer "tazelenmeye başlasam", muhtemelen kullanardım CMake
. "Kod oluşturma" işleminiz, ne yapmak istediğinize bağlı olarak yapı sisteminin ötesinde "kendi başına bir yaşam" alabilir. (Aşağıya bakınız.)
Basit projeler için QMake oluşturucusu tamamdır ( QMake'i kullanmak için Qt kütüphanelerini kullanmanıza gerek yoktur). Ancak, "basit" kod tanımlamıyorsunuz - kod üretimi ve "ekstra fazlar" CMake
, Scons
(veya Waf
) gibi kendi uzantılarınız için muhtemelen istediğiniz veya zengin bir API'ye sahip bir şey anlamına gelir .
İş yerinde Scons kullanıyoruz . "Kurşun geçirmez yapılar" üretir, ama gerçekten yavaştır. Başka hiçbir sistem kurşun geçirmez olmayacaktır Scons
. Ama yavaş. Python'da yazılmıştır ve "çalışma alanı organizasyonumuz" (sadece modül bağımlılıklarını belirttiğimiz) için arayüzü genişlettik ve bu Scons
tasarım amacının bir parçası ( Python aracılığıyla bu tür bir uzantı). Kullanışlı, ancak yapılar yavaş. Kurşun geçirmez yapılar alırsınız (herhangi bir geliştirici kutusu son sürümü yapabilir), ancak yavaş. Ve yavaş. Scons
Yine de kullanırsanız , yavaş olduğunu unutmayın. Ve yavaş.
2000 Yılından sonraki on yıl içinde hala uçan arabamız olmadığını düşünmek beni hasta ediyor. Muhtemelen onları elde etmek için yüz yıl daha beklememiz gerekecek. Ve sonra hepimiz hala berbat yapı sistemleri ile inşa edilen uçan arabalarımızda uçacağız.
Evet, hepsi korkunç.
[KOD ÜRETİMİ HAKKINDA]
Scons
"aşamalar" üzerinde çalışır ve "biraz statik" dir. Yapının bir parçası olarak üretilen kodu oluşturabilir (insanlar bunu birkaç farklı şekilde yapıyor), ancak bu "çok Scons benzeri olmayan bir şey" olarak tanımlandı.
Basitse "bazı dosyaları önceden işleyin ve kaynak dosyaları oluşturun", o zaman biggie yok (birçok seçeneğiniz var ve bu yüzden qmake
yazılmıştır - dosyaların moc
önişlenmesi için *.hpp/*.cpp
).
Ancak, bunu "ağır" bir şekilde yapıyorsanız, kendi kodunuzu yazmanız gerekecektir. Örneğin, veritabanlarını sorgulayan ve "katmanlar" (geleneksel 3 katmanlı uygulama geliştirmede) arasında arabirim oluşturmak için C ++ sınıfları oluşturan derlemenin bir parçası olarak komut dosyalarımız vardı. Benzer şekilde, IDL'ler aracılığıyla sunucu / istemci kaynak kodu oluşturduk ve birden çok istemcinin / sunucunun farklı sürümlerle (aynı "istemci" veya "sunucu" için) aynı anda çalışmasına izin vermek için gömülü sürüm bilgileri ekledik. Çok sayıda üretilen kaynak kodu. Bunun "yapı sistemi" olduğunu "iddia edebiliriz", ama gerçekten, "yapılandırma yönetimi" için önemsiz olmayan bir altyapıdır, bunun bir kısmı "yapı sistemi" dir. Örneğin, bu sistem "devralma" ve "