CMake hâlâ kendi görevini bilmiyor.
(dorinlazar.ro)CMake, giderek C++ için kötü bir çözüm gibi hissettiriyor. Yalnızca C++ geliştiricilerinin ihtiyaçlarını karşılayamamakla kalmıyor, aynı zamanda makefile’ları tutarsız bir dille son derece belirsiz ve yapılandırılmamış bir şekilde üreten karanlık çağda kalmamıza neden oluyor.
Sorun
C++ derleme dünyasında iki tür sorun var.
- Mevcut projelerin kendi kendine yarattığı sorunlar
- C++’ta yeni bir proje seçerken yaşanan sorunlar
CMake ilk sorunu çözmeye çalışıyor ve ikinci sorunu ise hiç çözmüyor. Ancak bu sorunları çözmeye çalışmadığı için daha az kullanışlı bir araç hâline geliyor.
CMake, proje tanımını derleme sistemine çeviren bir çevirmen olmak istiyor ve bu konuda feci şekilde başarısız oldu. Kötü bir proje tanım dili; tutarsız ve sezgisel değil.
C++ topluluğundaki herkes artık Rust araçlarından söz ediyor. Çünkü Cargo, çoğu geliştiricinin ihtiyaç duyduğunu düşündüğü şeyi gerçekten yapıyor. Cargo, internetten bağımlılıkları indirerek izole bir araç takımı oluşturuyor (kötü bir fikir) ve statik olarak bağlanmış kütüphaneler sağlıyor (bu da kötü bir fikir). İnsanların ihtiyacı, güvenlik açıklarını inanılmaz bir hızla ekleyen araçlar değil (yazar burada, Cargo’nun internetten otomatik olarak kod çekip bağlama yaklaşımının tedarik zinciri saldırıları gibi güvenlik riskleri yarattığını savunuyor. Bkz. I Hate Rust). Ama Cargo’nun gerçekten sunduğu şey gerekli:
- Son derece katı bir proje yapısı
- Kütüphanelerin nerede olduğu sorununu çözmek için dış sunuculara dayanan çok basit bir yapılandırma sistemi
- Tek bir araç seti.
İnsanların gerçekten ihtiyacı olan şey, işe odaklanabilmek için daha az özgürlük; çünkü derleyiciyi mümkün olan en kusursuz şekilde çağırma konusunda iyi değiller.
Çözüm
Henüz bir çözüm yok. Boş zamanlarımda klb yazıyorum ama şu anda bu bir çözüm değil. (Zaman ve para gerekiyor.)
Ama insanların neye ihtiyaç duyduğu açık. Daha fazla seçenek değil, daha az seçenek. Daha az seçenek, bir projenin derlenmesini bozmanın daha az yolu olduğu anlamına gelir.
CMake şu anda C++ dünyasındaki hâlâ en iyi seçenek, ama aynı zamanda son 20 yılda C++’ın başına gelen en kötü şey. Diğer her şey iyileşiyor, ama yalnızca derleme sistemleri kötüleşiyor.
10 yorum
Sözdizimi biraz kirli ama CMake kadar iyisi yok gibi.
M4 gibi bir şeyi POSIX dışı bir ortamda çalıştırmak insanın başını ağrıtıyor.
Zaten en baştan beri derleme ortamına bir sürü şeyin eklenmesinden hoşlanmadığım için meson ya da scone'a elim gitmiyor; premake de sanki bir şeyleri eksikmiş gibi göründüğünden, en fazla olabildiğince basit tutup sadece kod tanımlarını yaparak CMake kullanmaya yöneliyorum.
Uzun zamandır söylene söylene CMake kullanıyorum ama iş başa düşünce yine CMake gibisi yok.
bazelgerçekten tam bir cehennem.. Yeni bir projeye başlayacak olsammesonu değerlendirebilirim.Peki ya Meson veya Bazel?
Ben ikisini de hiç kullanmadım, o yüzden pek bilmiyorum...
Kişisel olarak ise küçük projelerde
gprbuildhoşuma gidiyor, bu yüzden onu kullanıyorum.CMake dışında diğer yöntemler de aynı derecede karmaşık.
En azından cross-platform olması bakımından.....
Sanırım Visual Studio bu yüzden popüler. Çünkü hemen kod yazmaya başlayabiliyorsunuz.
Bunun da ayrıntılarına inince sonu gelmiyor tabii.
CMake'i görünce bile midem bulanıyor...
Bence CMake'i make'in yerine geçen bir araç olarak değil, autotools'un (automake) yerine geçen bir araç olarak düşünmek gerekir.
Yine de sırf bir Makefile'a göre daha iyi gibi görünüyor.
Geçen ay shell script'ler, Perl, OS ortam değişkenleri ve oraya buraya dolanmış birden fazla Makefile'dan oluşan bir build ortamını analiz etmem gerekmişti; gerçekten insanı çıldırtıyordu.
Ayrıntılara inmeye çalıştığınız anda tavşan deliğine düşüyorsunuz...