CMake - CMake

CMake
Cmake.svg
Tuzuvchi (lar)Endi Sedilnik, Bill Xofman, Bred King, Ken Martin, Aleksandr Neundorf
Dastlabki chiqarilish2000; 20 yil oldin (2000)
Barqaror chiqish
3.19.1[1] / 2020 yil 24-noyabr; 4 kun oldin (2020-11-24)
Ombor Buni Vikidatada tahrirlash
YozilganC, C ++[2]
Operatsion tizimO'zaro faoliyat platforma
TuriDasturiy ta'minotni ishlab chiqish vositalari
LitsenziyaYangi BSD
Veb-saytsmake.org Buni Vikidatada tahrirlash

CMake o'zaro faoliyat platforma bepul va ochiq manbali dasturiy ta'minot vosita boshqarish uchun dasturiy ta'minotni yaratish jarayoni kompilyatordan mustaqil usul yordamida. CMake qurilish tizimi emas, aksincha bu build-system generatoridir. U bir nechta kutubxonalarga bog'liq bo'lgan kataloglar ierarxiyalari va dasturlarini qo'llab-quvvatlaydi. Kabi mahalliy qurish muhiti bilan birgalikda ishlatiladi Qil, Qt Creator, Ninja, Android Studio, Olmalar Xkod va Microsoft Visual Studio. Buning minimal bog'liqligi bor, faqat a ni talab qiladi C ++ o'z qurish tizimidagi kompilyator.

CMake quyidagicha taqsimlanadi ochiq manbali dasturiy ta'minot ruxsat etiladi Yangi BSD litsenziya.[3]

Tarix

CMake ishlab chiqish 1999 yilda o'zaro faoliyat platformalarni yaratish muhitiga bo'lgan ehtiyojga javoban boshlandi Insight Segmentation and Ro'yxatdan o'tish uchun qo'llanma.[4] Loyiha Amerika Qo'shma Shtatlarining Milliy tibbiyot kutubxonasi qismi sifatida Ko'rinadigan inson loyihasi. Bu qisman Ken Martin va boshqa ishlab chiquvchilar tomonidan qo'llab-quvvatlanadigan pcmaker tomonidan ilhomlangan Vizualizatsiya vositalari to'plami (VTK). Da Dasturiy ta'minot, Bill Xofman pcmakerning tarkibiy qismlarini o'z g'oyalari bilan aralashtirib, funksionalligini taqlid qilishga intildi Unix skriptlarni sozlash. CMake birinchi marta 2000 yilda ishlab chiqarilgan va 2001 yilda yanada rivojlangan.

Davomiy rivojlanish va takomillashtirish CMake-ni ishlab chiquvchilarning o'z tizimlariga, shu jumladan VXL Loyiha,[tushuntirish kerak ] KABLE[5] Bred King tomonidan qo'shilgan xususiyatlar,[tushuntirish kerak ] va GE Corporate R&D DART-ni qo'llab-quvvatlash uchun.[tushuntirish kerak ] VTK o'zining qurish muhiti va qo'llab-quvvatlash uchun CMake-ga o'tganida qo'shimcha funktsiyalar yaratildi ParaView.

3.0 versiyasi 2014 yil iyun oyida chiqarilgan.[6] Bu "Zamonaviy CMake" ning boshlanishi deb ta'riflangan.[7]Endi mutaxassislar foydasiga o'zgaruvchilardan saqlanishni maslahat berishmoqda maqsadlar va xususiyatlari.[8] Buyruqlar add_compile_options, include_direktoriyalar, link_direktoriyalar, link_liibaries CMake 2 yadrosi bo'lgan, endi maqsadga yo'naltirilgan buyruqlar bilan almashtirilishi kerak.

Xususiyatlari

CMake manba ichidagi va manbadan tashqari tuzilmalarni boshqarishi mumkin, shu bilan bir xil manba daraxtidan bir nechta tuzilmalarni yaratishga imkon beradi va o'zaro faoliyat kompilyatsiya. Ma'lumotlar daraxti tashqarisida katalog daraxtini yaratish qobiliyati asosiy xususiyat bo'lib, agar katalog olib tashlansa, asl manba fayllari ta'sirsiz qoladi.

Moslashuvchan loyiha tuzilishi

CMake butun tizim bo'ylab va foydalanuvchi tomonidan bajariladigan fayllar va kutubxonalarni topishi mumkin. Ushbu joylar a kesh, keyinchalik maqsadli fayllarni yaratishdan oldin moslashtirilishi mumkin. Keshni CMake bilan birga yuboriladigan grafik muharriri yordamida tahrirlash mumkin.

Murakkab kataloglar ierarxiyalari va bir nechta kutubxonalarga tayanadigan dasturlar CMake tomonidan yaxshi qo'llab-quvvatlanadi. Masalan, CMake bir nechta asboblar to'plamiga yoki har birida bir nechta katalogga ega bo'lgan kutubxonalarga ega bo'lgan loyihani joylashtirishga qodir. Bundan tashqari, CMake yakuniy dastur uchun kompilyatsiya qilinadigan kodni yaratishdan oldin bajariladigan fayllarni yaratishni talab qiladigan loyihalar bilan ishlashi mumkin. Uning ochiq manbali, kengaytiriladigan dizayni CMake-ni aniq loyihalar uchun kerak bo'lganda moslashtirishga imkon beradi.[9]

IDE konfiguratsiyasini qo'llab-quvvatlash

CMake bir nechta mashhurlar uchun loyiha fayllarini yaratishi mumkin IDElar, kabi Microsoft Visual Studio, Xkod va Tutilish CDT. Bundan tashqari, u Windows-da MSBuild yoki NMake uchun skriptlarni yaratishi mumkin; Unix Make kabi Unix-ga o'xshash platformalarda Linux, macOS va Kigvin; va Ninja ikkala Windows va Unix-ga o'xshash platformalarda.

Qurilish jarayoni

CMake bilan dastur yoki kutubxonani yaratish jarayoni ikki bosqichda amalga oshiriladi. Birinchidan, standart tuzish fayllari yozilgan (CMakeLists.txt) konfiguratsiya fayllaridan yaratiladi (yaratiladi) CM tilini yaratish. Keyinchalik platformalarni mahalliy qurish vositalari (mahalliy asboblar zanjiri) dasturlarni haqiqiy yaratish uchun ishlatiladi.[9][10]

Qurilish fayllari ishlatilgan generatorga qarab tuzilgan (masalan.) Unix Makefiles uchun qilish ). Ilg'or foydalanuvchilar, shuningdek, o'ziga xos kompilyator va OS ehtiyojlarini ta'minlash uchun qo'shimcha makefile generatorlarini yaratishi va qo'shishi mumkin. Yaratilgan fayllar odatda joylashtiriladi (yordamida smake flag) boshqa manbalar papkasida, masalan. qurmoq/.

Har bir qurish loyihasi o'z navbatida a ni o'z ichiga oladi CMakeCache.txt fayl va CMakeFiles loyihalarning har bir (pastki) katalogidagi katalog (tomonidan kiritilgan bo'lishi mumkin) add_subdirectory [...] Qayta tugashi bilan qayta tiklanish bosqichini oldini olishga yoki tezlashtirishga yordam beradi.

Maqsadlarni qurish turlari

CMakeLists.txt konfiguratsiyasiga qarab, tuzilgan fayllar bajariladigan fayllar, kutubxonalar (masalan,) bo'lishi mumkin. libxyz, xyz.dll va boshqalar), ob'ekt fayli kutubxonalar yoki psevdo-maqsadlar (shu jumladan taxalluslar). Cmake ob'ekt fayllarini ishlab chiqarishi mumkin, ularni bajariladigan ikkilik fayllar / kutubxonalar bog'lashi mumkin, buning o'rniga dinamik (ish vaqti) ulanishdan qochib, o'rniga statik (kompilyatsiya vaqti) dan foydalaning. Bu turli xil optimallashtirishlarni moslashuvchanligini ta'minlaydi.[11]

Til

CMake tili nisbatan sodda talqin qilingan, funktsional o'zgaruvchilar, satrlarni boshqarish, massivlar, funktsiya / so'l deklaratsiyalari va boshqa ko'plab tillarga xos bo'lgan modulni kiritish (import) kabi asosiy xususiyatlarni qo'llab-quvvatlaydigan skript tili. CMake Language buyruqlari o'qiladi smake dan CMakeLists.txt va .make- qo'shilgan matnli fayllar (ikkinchisi skriptlar sifatida ko'rib chiqiladi, asboblar zanjiri yaratuvchisi emas).[12]

Fayllarni yaratish bosqichida (mahalliy asboblar zanjiri tomonidan iste'mol qilinadi) smake o'z ichiga olgan katalogga kirish yo'li sifatida qabul qilinadi CMakeLists.txt uning buyruqlari o'z navbatida CMake xatti-harakatlari va natijalarini boshqaradi. Formada bir yoki bir nechta buyruqlar mavjud KOMANDA (arglar ...), bilan BUYURT o'zgaruvchilar yoki satrlar to'plami tomonidan e'lon qilingan argumentlarni qabul qilish bo'sh joy yoki (ixtiyoriy ravishda) ushbu buyruqqa xos bo'lgan kalit so'z. Dastur kutubxonalarini kompilyatsiya qilish uchun juda ko'p ichki qoidalar (buyruqlar) mavjud (statik va dinamik ) va bajariladigan fayllar, shuningdek funktsiyalar yoki makrolar kabi buyurtma qilish uchun vositalar mavjud. Ba'zi bir bog'liqliklarni avtomatik ravishda aniqlash mumkin.

Foydalanuvchilar, asosan, "basic" yordamida nimalar yaratmoqchi ekanliklarini skriptlar ichida ko'rsatib o'tishlari kerak add_executable(...) va add_library(...) buyruqlar.[13][14] U erdan ular kompilyatorning xatti-harakatlarini maqsadli xususiyatlar (v3.1 versiyasi bo'yicha) orqali yaratayotgan maqsadiga nisbatan o'zgartirishi yoki global konfiguratsiyani o'rnatishi mumkin. KO'RING _... prefiksli o'zgaruvchilar. Ikkinchisining maqsadi faqat konfiguratsiyalar uchun tavsiya etilmaydi, chunki bunday o'zgaruvchilar CMake-ni o'zi sozlash yoki global miqyosda dastlabki qiymatlarni o'rnatish uchun ham ishlatiladi.[8]

Ichki

CMake, CPack va CTest dasturlari C ++ dasturlash tili.

CMake funktsiyalarining ko'p qismi yozilgan modullarda amalga oshiriladi CM tilini yaratish.[15]

3.0 versiyasidan beri CMake hujjatlari foydalanadi reStructuredText belgilash. HTML-sahifalar va odam sahifalari Sfenks hujjatlar generatori.

Modullar

CMake ko'plab etkazib berilmoqda .make modullari, ular orasida foydalanuvchilarga bog'liqliklarni topishdan tortib muntazam ishlarni bajarishga yordam beradi FindXYZ ikkitomonlama fayllarni va atrof-muhitni (bog'liqliklar va asboblar zanjiri) va qadoqlash nashrlarini sinovdan o'tkazish uchun modullar CPack moduli va cpack bajariladigan.[16] CMake shuningdek tashqi loyihalarni boshqarish uchun import qilinadigan modulni taqdim etadi ExternalProject.[17]

CPack

CPack a qadoqlash dasturiy ta'minotni tarqatish tizimi, bu CMake bilan chambarchas birlashtirilgan, ammo u holda ishlashi mumkin.[18][19]

U quyidagilarni yaratish uchun ishlatilishi mumkin:

Misollar

Salom Dunyo

Quyidagi manba kodlari fayllari (joylashtirilgan deb taxmin qilinadi) src / papka) asosiy kompilyatsiyasini namoyish etadi Salom Dunyo deb nomlangan dastur Salom C ++ da yozilgan.

// src / Hello_world.cc# shu jumladan <iostream>int asosiy(){    std::cout << "Salom Dunyo!";}
# src / CMakeLists.txtsmake_minimum_quired(VERSION 3.10)# loyiha nomini o'rnatingloyiha("Salom Dunyo")# kompilyatsiya qilish uchun bajariladiganadd_executable(Salom "Hello_world.cc")

CMake ishlashi uchun quyidagilarni bajarish kerak bosh skript (. yoniga joylashtirilgan src / ostida ishlayotganingizni taxmin qiladigan papka Linux asoslangan OS va barcha kerakli bog'liqliklar o'rnatilgan):

#! / usr / bin / env bash                            # Ushbu faylni src / papkaning yoniga qo'yingcmake -S src / -B src.build/ # Qurilish fayllarini src.build/ papkasida yaratadicmake --build src.build/ # Aslida bajariladigan dasturni yaratadisrc.build/hello # => Salom, dunyo! - tuzilgan dasturdan chiqish

Shuningdek qarang

Adabiyotlar

  1. ^ "GitLab-da CMake-ning chiqarilishi teglari". Olingan 28 noyabr 2020.
  2. ^ "OpenHub-da CMake Open Source loyihasi". OpenHub. Olingan 2016-04-09.
  3. ^ "Litsenziyalar · master · CMake / CMake". GitLab. Olingan 2020-11-13.
  4. ^ "FLOSS Weekly 111: CMake". podkast. TWiT tarmog'i. Olingan 27 fevral 2011.
  5. ^ "Kabel". Arxivlandi asl nusxasi 2013-06-19. Olingan 2010-11-10.
  6. ^ https://cmake.org/pipermail/cmake/2014-June/057793.html
  7. ^ https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1#file-effective_modern_cmake-md
  8. ^ a b https://github.com/boostcon/cppnow_presentations_2017/blob/master/05-19-2017_friday/effective_cmake__daniel_pfeifer__cppnow_05-19-2017.pdf, https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1
  9. ^ a b Neundorf, Aleksandr (2006-06-21). "Nima uchun KDE loyihasi CMake-ga o'tdi va qanday qilib". LWN.net.
  10. ^ "cmake-toolchains (7) - CMake 3.19.0-rc2 hujjatlari". cmake.org. Olingan 2020-10-29.
  11. ^ "cmake-buildsystem (7) - CMake 3.19.0-rc3 hujjatlari". cmake.org. Olingan 2020-11-14.
  12. ^ "cmake-language (7) - CMake 3.19.0-rc2 hujjatlari". cmake.org. Olingan 2020-10-29.
  13. ^ "add_executable - CMake 3.19.0-rc1 hujjatlari". cmake.org. Olingan 2020-10-25.
  14. ^ "add_library - CMake 3.19.0-rc1 hujjatlari". cmake.org. Olingan 2020-10-25.
  15. ^ "cmake-language (7) - CMake 3.19.0-rc1 hujjatlari". cmake.org. Olingan 2020-10-25.
  16. ^ "cmake-modullar (7) - CMake 3.14.7 hujjatlari". cmake.org. Olingan 2020-10-24.
  17. ^ "ExternalProject - CMake 3.14.7 hujjatlari". cmake.org. Olingan 2020-10-24.
  18. ^ "CPack bilan qadoqlash". CMake Community Wiki.
  19. ^ cpack (1) – Linux Umumiy buyruqlar Qo'lda

Tashqi havolalar