Apa perbedaan antara Autotools, Cmake dan Scons?
Apa perbedaan antara Autotools, Cmake dan Scons?
Jawaban:
Sebenarnya, Autotools 'satu-satunya' rahmat penyelamatan 'yang sebenarnya adalah apa yang sebagian besar proyek GNU gunakan.
Masalah dengan Autotools:
Ini berfungsi ... sebagian besar waktu ... adalah semua yang dapat Anda katakan tentang Autotools. Ini adalah sistem yang memecahkan beberapa masalah yang hanya benar-benar menyangkut proyek GNU ... untuk basis mereka, kode toolchain inti. (Sunting (24/5/2014): Perlu dicatat bahwa jenis kekhawatiran ini berpotensi mengkhawatirkan BAD - Heartbleed sebagian berasal dari pemikiran ini dan dengan sistem modern yang benar , Anda benar-benartidak memiliki bisnis yang berurusan dengan banyak hal untuk mengoreksi Autotools. GNU mungkin perlu melakukan penghapusan kode dasar, mengingat apa yang terjadi dengan Heartbleed) Anda dapat menggunakannya untuk melakukan proyek Anda dan mungkin bekerja dengan baik untuk proyek bertubuh kecil yang Anda tidak harapkan untuk bekerja di mana pun kecuali Linux atau di mana toolchain GNU jelas bekerja dengan benar. Pernyataan bahwa "menyatu dengan baik dengan Linux" adalah cukup pernyataan berani dan cukup benar . Ini terintegrasi dengan GNU toolsuite dengan cukup baik dan memecahkan masalah yang TI miliki dengan tujuan itu.
Ini bukan untuk mengatakan bahwa tidak ada masalah dengan opsi lain yang dibahas di utas di sini.
SCons lebih merupakan pengganti Make / GMake / etc. dan terlihat cukup bagus, semua hal dipertimbangkan Namun ...
Contoh yang diberikan untuk CMake di utas ini agak palsu.
Namun...
Sebenarnya, tujuan Anda harus menentukan apa yang Anda pilih di sini.
Ada alasan mengapa banyak, banyak proyek yang membuang qmake, Autotools, dll dan pindah ke CMake. Sejauh ini, saya dapat dengan bersih mengharapkan proyek berbasis CMake baik jatuh ke dalam situasi lintas-kompilasi atau ke setup VisualStudio atau hanya perlu sedikit pembersihan karena proyek tidak memperhitungkan hanya bagian Windows atau OSX saja saja. ke basis kode. Saya tidak dapat benar-benar berharap bahwa dari proyek berbasis SCons- dan saya sepenuhnya berharap 1/3 atau lebih proyek Autotools telah mendapatkan SESUATU yang salah yang menghalanginya membangun tepat pada konteks apa pun kecuali host yang membangun satu atau yang Scratchbox2.
Perbedaan penting harus dibuat antara siapa yang menggunakan alat. Cmake adalah alat yang harus digunakan oleh pengguna saat membangun perangkat lunak. Autotool digunakan untuk menghasilkan tarball distribusi yang dapat digunakan untuk membangun perangkat lunak hanya menggunakan alat standar yang tersedia pada sistem yang sesuai SuS. Dengan kata lain, jika Anda menginstal perangkat lunak dari tarball yang dibangun menggunakan autotools, Anda tidak menggunakan autotools . Di sisi lain, jika Anda menginstal perangkat lunak yang menggunakan Cmake, maka Anda sedang menggunakan Cmake dan harus menginstalnya untuk membangun perangkat lunak.
Sebagian besar pengguna tidak perlu menginstal autotool pada kotaknya. Secara historis, banyak kebingungan telah disebabkan karena banyak pengembang mendistribusikan tarbal yang salah bentuk yang memaksa pengguna untuk menjalankan autoconf untuk membuat ulang skrip configure, dan ini adalah kesalahan pengemasan. Lebih banyak kebingungan telah disebabkan oleh kenyataan bahwa sebagian besar distribusi linux utama menginstal beberapa versi autotool, ketika mereka seharusnya tidak menginstal salah satu dari mereka secara default. Bahkan lebih banyak kebingungan disebabkan oleh pengembang yang mencoba menggunakan sistem kontrol versi (mis. Cvs, git, svn) untuk mendistribusikan perangkat lunak mereka daripada membangun tarbal.
asciidoc
atau help2man
atau doxygen
atau, penting, kombinasi Autotool yang benar. Ini telah menjadi masalah pemasaran yang sangat besar bagi para autotool. Pengguna salah mengira mereka perlu menginstal autoconf karena mereka tidak mengerti perbedaan antara tarball dan VCS.
Ini bukan tentang standar pengkodean GNU.
Manfaat autotool saat ini - khususnya ketika digunakan dengan automake - adalah mereka berintegrasi dengan sangat baik dengan membangun distribusi Linux.
Dengan cmake misalnya, selalu "apakah -DCMAKE_CFLAGS atau -DCMAKE_C_FLAGS yang saya butuhkan?" Tidak, tidak juga, ini "-DCMAKE_C_FLAGS_RELEASE". Atau -DCMAKE_C_FLAGS_DEBUG. Ini membingungkan - dalam autoconf, hanya saja ./configure CFLAGS = "- O0 -ggdb3" dan Anda memilikinya.
Dalam integrasi dengan membangun infrastruktur, scon memiliki masalah yang tidak dapat Anda gunakan make %{?_smp_mflags}
, _smp_mflags
dalam hal ini menjadi makro RPM yang secara kasar memperluas daya sistem (admin dapat mengaturnya). Orang-orang menaruh hal-hal seperti -jNCPUS di sini melalui lingkungan mereka. Dengan scon yang tidak berfungsi, jadi paket-paket yang menggunakan scon hanya bisa mendapatkan serial built in distro.
./configure CFLAGS=-O0
sering gagal dengan paket yang menimpa CFLAGS di makefile dan mengharuskan pengguna untuk menjalankannya ./configure --enable-debug
. (misalnya tmux
).
Yang penting untuk diketahui tentang Autotools adalah bahwa mereka bukan sistem pembangunan umum - mereka menerapkan standar pengkodean GNU dan tidak ada yang lain. Jika Anda ingin membuat paket yang mengikuti semua standar GNU, maka Autotools adalah alat yang sangat baik untuk pekerjaan itu. Jika tidak, maka Anda harus menggunakan Scons atau CMake. (Misalnya, lihat pertanyaan ini .) Kesalahpahaman umum ini adalah dari mana sebagian besar frustrasi dengan Autotools berasal.
AUTOMAKE_OPTIONS = -foreign
di Makefile.am
. (Atau -foreign
dalam bahasa Anda autogen.sh
. Saya pikir hampir semua orang menggunakan ini.)
installcheck
dan distclean
. Jika Anda mencoba mengubah perilaku semacam itu saat masih menggunakan Autotools, maka Anda hanya membuang-buang waktu.
Sementara dari sudut pandang pengembang, cmake saat ini paling mudah digunakan, dari sudut pandang pengguna autotool memiliki satu keuntungan besar
autotools menghasilkan skrip konfigurasi file tunggal dan semua file untuk menghasilkannya dikirimkan bersama distribusi. mudah dimengerti dan diperbaiki dengan bantuan grep / sed / awk / vi. Bandingkan ini dengan Cmake di mana banyak file ditemukan di / usr / share / cmak * / Modul, yang tidak dapat diperbaiki oleh pengguna kecuali dia memiliki akses admin.
Jadi, jika sesuatu tidak cukup berfungsi, biasanya dapat dengan mudah "diperbaiki" dengan menggunakan alat-alat Standard Unix (grep / sed / awk / vi dll) dengan cara palu godam tanpa harus memahami sistem builds.
Pernahkah Anda menggali melalui direktori build cmake untuk mencari tahu apa yang salah? Dibandingkan dengan shellscript sederhana yang dapat dibaca dari atas ke bawah, mengikuti file Cmake yang dihasilkan untuk mengetahui apa yang sedang terjadi cukup sulit. JUGA, dengan CMake, mengadaptasi file FindFoo.cmake tidak hanya membutuhkan pengetahuan tentang bahasa CMake, tetapi juga mungkin memerlukan hak superuser.