Yanıtlar:
Marka (veya daha doğrusu Makefile) bir yapı sistemidir - kodunuzu oluşturmak için derleyiciyi ve diğer oluşturma araçlarını çalıştırır.
CMake bir yapı sistemleri üretecidir. Makefiles üretebilir, Ninja derleme dosyaları üretebilir, KDEvelop veya Xcode projeleri üretebilir, Visual Studio çözümleri üretebilir. Aynı başlangıç noktasından aynı CMakeLists.txt dosyası. Platformdan bağımsız bir projeniz varsa, CMake onu sistemden bağımsız hale getirmenin bir yoludur.
GNU Make tarafından yemin eden Visual Studio ve Unix geliştiricilerine alışkın olduğunuz Windows geliştiricileriniz varsa, CMake gidilecek yollardan biridir.
Projenizi çok platformlu veya yaygın olarak kullanılabilir kılmak istiyorsanız, CMake'i (veya başka bir yapı sistemi oluşturucusunu kullanmanızı öneririm, ancak CMake benim kişisel tercihimdir). CMake ayrıca bağımlılık algılama, kütüphane arayüz yönetimi veya CTest, CDash ve CPack ile entegrasyon gibi bazı güzel özellikler de sunar.
Bir yapı sistemi jeneratörü kullanmak, projenizi geleceğe daha dayanıklı hale getirir. Şimdi GNU-Make-you olsanız bile, daha sonra diğer platformlara (Windows veya gömülü bir şey olsun) genişlemeye karar verirseniz veya sadece bir IDE kullanmak isterseniz ne olur?
find_package()) Veya test / paketleme desteği gibi başka işlevleri de vardır .
CMake'in "derleme oluşturucusu" olduğu ile ilgili açıklama yaygın bir yanlış anlamadır.
Teknik olarak yanlış değil; sadece NASIL çalıştığını açıklar, ama ne işe yaradığını açıklamaz.
Soru bağlamında, aynı şeyi yapıyorlar: bir grup C / C ++ dosyası alıp bir ikili dosyaya dönüştürün.
Peki, gerçek fark nedir?
CMake çok daha üst düzey. Daha az derleme kodu yazdığınız C ++ 'ı derlemek için tasarlanmıştır, ancak genel amaçlı derleme için de kullanılabilir. makebazı yerleşik C / C ++ kuralları da vardır, ancak çoğunlukla işe yaramazlar.
CMakeiki adımlı yapı yapar: bir düşük seviyeli inşa komut dosyası oluşturur ninjaveya makediğer birçok jeneratörler veya ve sonra çalıştırın. Normalde yığınlanan tüm kabuk komut dosyası parçaları Makefileyalnızca oluşturma aşamasında yürütülür. Böylece, CMakeyapı daha hızlı büyüklük emirleri olabilir.
Dilbilgisi CMakedış araçları için destek çok daha kolaydır yapmak en fazla .
Bir makeyapıyı inşa ettikten sonra nasıl yapıldığını unutur. Hangi kaynaklardan inşa edildi, hangi derleyici bayrakları? CMakeizler, size makebırakır. Kütüphane kaynaklarından biri önceki sürümüne beri kaldırıldıysa Makefile, makeonu yeniden olmayacaktır.
Modern CMake(3. sürümünden başlayarak) "hedefler" arasındaki bağımlılıklar açısından çalışır. Hedef hala tek bir otput dosyasıdır (ne yazık ki), ancak geçişli (CMake terimleriyle "genel" / "arayüz") bağımlılıklara sahip olabilir. Bu geçişli bağımlılıklar bağımlı paketlere maruz kalabilir veya gizlenebilir. CMakesizin için dizinleri de yönetecektir. İle make, bir dosya dosya ve yönetme dizinleri düzeyinde takılıp kalırsınız.
makeSon iki boşluğu kapatmak için bayrak dosyalarını kullanırken bir şey kodlayabilirsiniz , ancak kendi başınıza olursunuz. makebir Turing tam dili (hatta iki, bazen üç sayım Guile ) içerir ve hepsi korkunçtur.
Dürüst olmak gerekirse, bu nedir CMakeve make: onların dilleri oldukça korkunç - ortak noktası
ile başlamak.
Ama CMakesen çok daha az kod satırı yazıyorsun.