GNU/Linux >> Belajar Linux >  >> Linux

Pengantar GNU Autotools

Pernahkah Anda mengunduh kode sumber untuk proyek perangkat lunak populer yang mengharuskan Anda mengetikkan ./configure; buat &&buat pemasangan urutan perintah untuk membangun dan menginstalnya? Jika demikian, Anda telah menggunakan GNU Autotools. Jika Anda pernah melihat beberapa file yang menyertai proyek semacam itu, Anda mungkin juga takut dengan kerumitan yang tampak dari sistem pembangunan semacam itu.

Kabar baik! GNU Autotools jauh lebih sederhana untuk disiapkan daripada yang Anda pikirkan, dan GNU Autotools sendirilah yang menghasilkan file konfigurasi 1.000 baris itu untuk Anda. Ya, Anda dapat menulis 20 atau 30 baris kode instalasi dan mendapatkan 4.000 lainnya secara gratis.

Perkakas otomatis di tempat kerja

Terminal Linux

  • 7 emulator terminal teratas untuk Linux
  • 10 alat baris perintah untuk analisis data di Linux
  • Unduh Sekarang:lembar contekan SSH
  • Lembar contekan perintah Linux tingkat lanjut
  • Tutorial baris perintah Linux

Jika Anda pengguna baru Linux yang mencari informasi tentang cara menginstal aplikasi, Anda tidak perlu membaca artikel ini! Anda dipersilakan untuk membacanya jika Anda ingin meneliti bagaimana perangkat lunak dibuat, tetapi jika Anda baru saja menginstal aplikasi baru, baca artikel saya tentang menginstal aplikasi di Linux.

Untuk pengembang, Autotools adalah cara cepat dan mudah untuk mengelola dan mengemas kode sumber sehingga pengguna dapat mengkompilasi dan menginstal perangkat lunak. Autotools juga didukung dengan baik oleh format pengemasan utama, seperti DEB dan RPM, sehingga pengelola repositori perangkat lunak dapat dengan mudah menyiapkan proyek yang dibuat dengan Autotools.

Autotools bekerja secara bertahap:

  1. Pertama, selama ./configure langkah, Autotools memindai sistem host (komputer yang sedang dijalankan) untuk menemukan pengaturan default. Pengaturan default termasuk di mana perpustakaan dukungan berada, dan di mana perangkat lunak baru harus ditempatkan pada sistem.
  2. Selanjutnya, selama membuat langkah, Autotools membangun aplikasi, biasanya dengan mengubah kode sumber yang dapat dibaca manusia menjadi bahasa mesin.
  3. Akhirnya, selama make install langkah, Autotools menyalin file yang dibuatnya ke lokasi yang sesuai (seperti yang terdeteksi selama tahap konfigurasi) di komputer Anda.

Proses ini tampaknya sederhana, dan memang demikian, selama Anda menggunakan Autotools.

Keuntungan Autotools

GNU Autotools adalah perangkat lunak besar dan penting yang sebagian besar dari kita anggap remeh. Bersama dengan GCC (The GNU Compiler Collection), Autotools adalah perancah yang memungkinkan Perangkat Lunak Bebas dibangun dan diinstal ke sistem yang sedang berjalan. Jika Anda menjalankan sistem POSIX, tidak berlebihan untuk mengatakan bahwa sebagian besar sistem operasi Anda ada sebagai perangkat lunak yang dapat dijalankan di komputer Anda karena proyek ini.

Jika proyek kesayangan Anda bukan sistem operasi, Anda mungkin berasumsi bahwa Autotools berlebihan untuk kebutuhan Anda. Namun, terlepas dari reputasinya, Autotools memiliki banyak fitur kecil yang mungkin bermanfaat bagi Anda, bahkan jika proyek Anda adalah aplikasi atau rangkaian skrip yang relatif sederhana.

Portabilitas

Pertama-tama, Autotools hadir dengan mempertimbangkan portabilitas. Meskipun tidak dapat membuat proyek Anda bekerja di semua platform POSIX (terserah Anda, sebagai pembuat kode), Autotools dapat memastikan bahwa file yang Anda tandai untuk penginstalan dapat diinstal ke lokasi yang paling masuk akal pada platform yang dikenal. Dan karena Autotools, sangat mudah bagi power user untuk menyesuaikan dan mengganti nilai yang tidak optimal, menurut sistem mereka sendiri.

Dengan Autotools, yang perlu Anda ketahui adalah file apa yang perlu diinstal ke lokasi umum apa. Itu mengurus segala sesuatu yang lain. Tidak ada lagi skrip pemasangan khusus yang rusak pada OS yang belum diuji.

Kemasan

Autotools juga didukung dengan baik. Serahkan proyek dengan Autotools ke pembuat paket distro, apakah mereka mengemas RPM, DEB, TGZ, atau apa pun, dan pekerjaan mereka sederhana. Alat pengemasan tahu Autotools, jadi kemungkinan tidak perlu menambal, meretas, atau menyesuaikan. Dalam banyak kasus, memasukkan proyek Autotools ke dalam pipeline bahkan dapat dilakukan secara otomatis.

Cara menggunakan Autotools

Untuk menggunakan Autotools, Anda harus menginstal Autotools terlebih dahulu. Distribusi Anda mungkin menyediakan satu paket yang dimaksudkan untuk membantu pengembang membangun proyek, atau mungkin menyediakan paket terpisah untuk setiap komponen, jadi Anda mungkin harus melakukan riset di platform Anda untuk menemukan paket apa yang perlu Anda instal.

Komponen utama Autotools adalah:

  • pembuatan mobil
  • konflik otomatis
  • buat

Meskipun Anda mungkin perlu menginstal compiler (GCC, misalnya) yang diperlukan oleh proyek Anda, Autotools berfungsi baik dengan skrip atau aset biner yang tidak perlu dikompilasi. Faktanya, Autotools dapat berguna untuk proyek semacam itu karena menyediakan make uninstall skrip agar mudah dihapus.

Setelah semua komponen terpasang, saatnya untuk melihat struktur file proyek Anda.

Struktur proyek Autotools

GNU Autotools memiliki ekspektasi yang sangat spesifik, dan kebanyakan dari mereka mungkin familiar jika Anda sering mengunduh dan membuat kode sumber. Pertama, kode sumber itu sendiri diharapkan berada di subdirektori bernama src .

Proyek Anda tidak harus mengikuti semua harapan ini, tetapi jika Anda meletakkan file di lokasi yang tidak standar (dari perspektif Autotools), maka Anda harus melakukan penyesuaian untuk itu di Makefile Anda nanti.

Selain itu, file-file ini diperlukan:

  • BERITA
  • BACA SAYA
  • PENGARANG
  • ChangeLog

Anda tidak perlu menggunakan file secara aktif, dan file tersebut dapat menjadi symlink ke dokumen monolitik (seperti README.md ) yang mencakup semua informasi itu, tetapi harus ada.

Konfigurasi Autotools

Buat file bernama configure.ac di direktori root proyek Anda. File ini digunakan oleh autoconf untuk membuat konfigurasi skrip shell yang dijalankan pengguna sebelum membangun. File harus berisi, setidaknya, AC_INIT dan AC_OUTPUT makro M4. Anda tidak perlu tahu apa-apa tentang bahasa M4 untuk menggunakan makro ini; mereka sudah ditulis untuk Anda, dan semua yang relevan dengan Autotools didefinisikan dalam dokumentasi.

Buka file di editor teks favorit Anda. AC_INIT makro dapat terdiri dari nama paket, versi, alamat email untuk laporan bug, URL proyek, dan secara opsional nama file TAR sumber.

AC_OUTPUT makro jauh lebih sederhana dan tidak menerima argumen.

AC_INIT([penguin], [2019.3.6], [[email protected]])
AC_OUTPUT

Jika Anda menjalankan autoconf pada titik ini, konfigurasi skrip akan dibuat dari configure.ac . Anda file, dan itu akan berjalan dengan sukses. Hanya itu yang akan dilakukan, karena sejauh ini yang Anda lakukan hanyalah mendefinisikan metadata proyek Anda dan meminta skrip konfigurasi untuk dibuat.

Makro berikutnya yang harus Anda panggil di configure.ac . Anda file adalah fungsi untuk membuat Makefile. Makefile memberi tahu make perintah apa yang harus dilakukan (biasanya, cara mengkompilasi dan menautkan program).

Makro untuk membuat Makefile adalah AM_INIT_AUTOMAKE , yang tidak menerima argumen, dan AC_CONFIG_FILES , yang menerima nama yang Anda inginkan untuk memanggil file keluaran Anda.

Terakhir, Anda harus menambahkan makro untuk memperhitungkan kompiler yang dibutuhkan proyek Anda. Makro yang Anda gunakan jelas bergantung pada proyek Anda. Jika proyek Anda ditulis dalam C++, makro yang sesuai adalah AC_PROG_CXX , sedangkan proyek yang ditulis dalam C memerlukan AC_PROG_CC , dan seterusnya, seperti yang dijelaskan di bagian Membangun Program dan Pustaka di dokumentasi Autoconf.

Sebagai contoh, saya mungkin menambahkan berikut ini untuk program C++ saya:

AC_INIT([penguin], [2019.3.6], [[email protected]])
AC_OUTPUT
AM_INIT_AUTOMAKE
AC_CONFIG_FILES([Makefile])
AC_PROG_CXX

Simpan file. Saatnya beralih ke Makefile.

Pembuatan Makefile Autotools

Makefile tidak sulit untuk ditulis secara manual, tetapi Autotools dapat menulisnya untuk Anda, dan yang dihasilkannya akan menggunakan opsi konfigurasi yang terdeteksi selama ./configure langkah, dan itu akan berisi lebih banyak opsi daripada yang Anda pikirkan untuk disertakan atau ingin Anda tulis sendiri. Namun, Autotools tidak dapat mendeteksi semua yang dibutuhkan proyek Anda untuk dibangun, jadi Anda harus menambahkan beberapa detail di file Makefile.am , yang selanjutnya digunakan oleh automake saat membuat Makefile.

Makefile.am menggunakan sintaks yang sama dengan Makefile, jadi jika Anda pernah menulis Makefile dari awal, maka proses ini akan akrab dan sederhana. Seringkali, sebuah Makefile.am file hanya membutuhkan beberapa definisi variabel untuk menunjukkan file apa yang akan dibuat, dan di mana mereka akan diinstal.

Variabel yang diakhiri dengan _PROGRAMS mengidentifikasi kode yang akan dibuat (ini biasanya dianggap sebagai utama target; itu alasan utama Makefile ada). Automake mengenali pendahuluan lainnya, seperti _SCRIPTS , _DATA , _PERPUSTAKAAN , dan bagian umum lainnya yang membentuk proyek perangkat lunak.

Jika aplikasi Anda benar-benar dikompilasi selama proses pembuatan, maka Anda mengidentifikasinya sebagai program biner dengan bin_PROGRAMS variabel, dan kemudian mereferensikan bagian mana pun dari kode sumber yang diperlukan untuk membuatnya (bagian ini dapat berupa satu atau lebih file untuk dikompilasi dan dihubungkan bersama) menggunakan nama program sebagai awalan variabel:

bin_PROGRAMS =penguin
penguin_SOURCES =penguin.cpp

Target bin_PROGRAMS diinstal ke dalam bindir , yang dapat dikonfigurasi pengguna selama kompilasi.

Jika aplikasi Anda tidak benar-benar dikompilasi, maka proyek Anda tidak memerlukan bin_PROGRAMS variabel sama sekali. Misalnya, jika proyek Anda adalah skrip yang ditulis dalam Bash, Perl, atau bahasa yang ditafsirkan serupa, maka tentukan _SCRIPTS sebagai gantinya:

bin_SCRIPTS =bin/penguin

Automake mengharapkan sumber berada di direktori bernama src , jadi jika proyek Anda menggunakan struktur direktori alternatif untuk tata letaknya, Anda harus memberi tahu Automake untuk menerima kode dari sumber luar:

AUTOMAKE_OPTIONS =objek subdirektori asing

Terakhir, Anda dapat membuat aturan Makefile khusus apa pun di Makefile.am dan mereka akan disalin kata demi kata ke dalam Makefile yang dihasilkan. Misalnya, jika Anda mengetahui bahwa nilai sementara perlu diganti dalam kode sumber Anda sebelum penginstalan dilanjutkan, Anda dapat membuat aturan khusus untuk proses tersebut:

all-am:penguin
        sentuh bin/penguin.sh
       
penguin:bin/penguin.sh
        @sed "s|__datadir__|@datadir@|" $<>bin/$@

Trik yang sangat berguna adalah memperluas clean . yang ada target, setidaknya selama pengembangan. membuat bersih perintah umumnya menghapus semua file build yang dihasilkan dengan pengecualian infrastruktur Automake. Ini dirancang dengan cara ini karena sebagian besar pengguna jarang ingin menjadi bersih untuk menghapus file yang memudahkan pembuatan kodenya.

Namun, selama pengembangan, Anda mungkin menginginkan metode untuk mengembalikan proyek Anda secara andal ke keadaan yang relatif tidak terpengaruh oleh Autotools. Dalam hal ini, Anda mungkin ingin menambahkan ini:

clean-local:
        @rm config.status configure config.log
        @rm Makefile
        @rm -r autom4te.cache/
        @rm aclocal.m4
        @rm compile install-sh missing Makefile.in

Ada banyak fleksibilitas di sini, dan jika Anda belum terbiasa dengan Makefiles, mungkin sulit untuk mengetahui apa Makefile.am Anda. kebutuhan. Kebutuhan paling sederhana adalah target utama, apakah itu program biner atau skrip, dan indikasi di mana kode sumber berada (apakah itu melalui _SOURCES variabel atau dengan menggunakan AUTOMAKE_OPTIONS untuk memberi tahu Automake tempat mencari kode sumber).

Setelah variabel dan setelan tersebut ditentukan, Anda dapat mencoba membuat skrip build seperti yang Anda lihat di bagian berikutnya, dan menyesuaikan apa pun yang hilang.

Pembuatan skrip pembuatan alat otomatis

Anda telah membangun infrastruktur, sekarang saatnya membiarkan Autotools melakukan yang terbaik:mengotomatiskan perkakas proyek Anda. Cara pengembang (Anda) berinteraksi dengan Autotools berbeda dengan cara pengguna membuat kode Anda.

Pembangun umumnya menggunakan urutan terkenal ini:

$ ./configure
$ make
$ sudo make install

Agar mantra itu berfungsi, Anda sebagai pengembang harus mem-bootstrap infrastruktur build. Pertama, jalankan autoreconf untuk membuat skrip konfigurasi yang dipanggil pengguna sebelum menjalankan make . Gunakan –instal opsi untuk membawa file tambahan, seperti symlink ke depcomp , skrip untuk menghasilkan dependensi selama proses kompilasi, dan salinan kompilasi script, pembungkus untuk compiler untuk memperhitungkan varians sintaks, dan sebagainya.

$ autoreconf --install
configure.ac:3:menginstal './compile'
configure.ac:2:menginstal './install-sh'
configure.ac:2:menginstal './missing'

Dengan lingkungan pembangunan pengembangan ini, Anda kemudian dapat membuat paket untuk distribusi kode sumber:

$ membuat perbedaan

Distrik target adalah aturan yang Anda dapatkan "gratis" dari Autotools.

Ini adalah fitur yang dibangun ke dalam Makefile yang dihasilkan dari Makefile.am sederhana Anda. konfigurasi. Target ini menghasilkan tar.gz arsip yang berisi semua kode sumber Anda dan semua infrastruktur Autotools yang penting sehingga orang yang mengunduh paket dapat membangun proyek.

Pada titik ini, Anda harus meninjau isi arsip dengan hati-hati untuk memastikan bahwa itu berisi semua yang ingin Anda kirimkan kepada pengguna Anda. Anda juga harus, tentu saja, mencoba membangunnya sendiri:

$ tar --extract --file penguin-0.0.1.tar.gz
$ cd penguin-0.0.1
$ ./configure
$ make
$ DESTDIR=/tmp/penguin-test-build make install

Jika build Anda berhasil, Anda akan menemukan salinan lokal dari aplikasi terkompilasi yang ditentukan oleh DESTDIR (dalam kasus contoh ini, /tmp/penguin-test-build ).

$ /tmp/example-test-build/usr/local/bin/example 
halo dunia dari GNU Autotools

Waktunya menggunakan Autotools

Autotools adalah kumpulan skrip yang bagus untuk proses rilis yang dapat diprediksi dan otomatis. Toolset ini mungkin baru bagi Anda jika Anda terbiasa dengan Python atau Bash builder, tetapi sepertinya layak dipelajari untuk struktur dan kemampuan beradaptasi yang diberikannya untuk proyek Anda.

Dan Autotools juga bukan hanya untuk kode. Autotools dapat digunakan untuk membuat proyek Docbook, untuk mengatur media (saya menggunakan Autotools untuk rilis musik saya), proyek dokumentasi, dan hal lain yang dapat memanfaatkan target pemasangan yang dapat disesuaikan.


Linux
  1. Pengantar Gambar Docker

  2. Pengantar Docker

  3. GNU mengurutkan berdasarkan peka huruf besar-kecil

  1. Pengantar Utilitas Inti GNU

  2. Bahasa Pemrograman C - Pendahuluan

  3. Pengantar perintah diff

  1. Pengantar Docker

  2. Pengenalan iptables

  3. Plesk:Pendahuluan