Pengenalan
- 4861
- 1398
- Daryl Wilderman
Lagipun teori dan bercakap, mari kita mulakan dengan membina kod yang ditulis melalui sembilan bahagian terakhir siri ini. Bahagian siri kami ini sebenarnya mungkin melayani anda walaupun anda belajar di tempat lain, atau jika anda menganggap perkembangan praktikal anda memerlukan sedikit kekuatan. Kami akan melihat cara memasang perisian yang diperlukan, apa yang dikatakan perisian dan, yang paling penting, bagaimana mengubah kod anda menjadi nol dan yang lain. Sebelum kita mula, anda mungkin ingin melihat artikel terbaru kami tentang cara menyesuaikan persekitaran pembangunan anda:
- Pengenalan kepada editor Vim
- Pengenalan kepada Emacs
- Menyesuaikan Vim untuk Pembangunan
- Menyesuaikan emac untuk pembangunan
Membina program anda
Ingat bahagian pertama Siri Pembangunan C kami? Di sana kami menggariskan proses asas yang berlaku semasa anda menyusun program anda. Tetapi melainkan jika anda bekerja dalam pembangunan pengkompil atau beberapa barangan tahap yang sangat rendah, anda tidak akan berminat berapa banyak arahan JMP yang dihasilkan oleh fail pemasangan yang dihasilkan, jika ada. Anda hanya ingin tahu bagaimana mungkin sebaik mungkin. Inilah bahagian artikel ini, tetapi kita hanya menggaru permukaan, kerana keluasan subjek. Tetapi pengaturcara C Level akan mengetahui setelah membaca semua yang diperlukan untuk berfungsi dengan cekap.
Alat
Selain mengetahui dengan tepat apa yang anda ingin capai, anda perlu mengenali alat untuk mencapai apa yang anda mahukan. Dan ada lebih banyak lagi alat pembangunan Linux daripada GCC, walaupun ia hanya cukup untuk menyusun program, tetapi ia akan menjadi tugas yang membosankan kerana saiz projek anda meningkat. Inilah sebabnya mengapa instrumen lain telah dibuat, dan kita akan melihat di sini apa yang mereka dan bagaimana untuk mendapatkannya. Saya sudah lebih daripada mencadangkan anda membaca manual GCC, jadi saya hanya akan menganggap bahawa anda melakukannya.
buat
Bayangkan anda mempunyai projek pelbagai fail, dengan banyak fail sumber, kerja. Sekarang bayangkan bahawa anda perlu mengubah suai satu fail (sesuatu yang kecil) dan tambahkan beberapa kod ke fail sumber lain. Akan menyakitkan untuk membina semula semua projek kerana itu. Inilah sebabnya Make dibuat: Berdasarkan cap waktu fail, ia mengesan fail yang perlu dibina semula untuk mendapatkan hasil yang diinginkan (executable, fail objek ...), bernama sasaran. Sekiranya konsep masih kelihatan keruh, jangan risau: Setelah menerangkan konsep Makefile dan Umum, semuanya akan kelihatan lebih mudah, walaupun konsep Make Advanced boleh menjadi sakit kepala.
Buat mempunyai nama tepat ini di semua platform yang saya kerjakan, yang agak banyak distros Linux, *BSD dan Solaris. Oleh itu, tanpa mengira pengurus pakej yang anda gunakan (jika ada), sama ada apt*, yum, zyper, pacman atau muncul, hanya gunakan arahan pemasangan masing -masing dan buat sebagai hujah dan itu sahaja. Pendekatan lain adalah, pada distro dengan pengurus pakej yang mempunyai sokongan kumpulan, untuk memasang keseluruhan kumpulan/corak pembangunan C/C ++. Bercakap tentang bahasa, saya ingin menyahpepijat mitos di sini, yang mengatakan Makefiles (set peraturan yang dibuat harus mengikuti untuk mencapai sasaran) hanya digunakan oleh pemaju C/C ++. Salah. Mana -mana bahasa dengan pengkompil/penterjemah yang dapat dipanggil dari shell boleh menggunakan kemudahan Make. Malah, mana-mana projek yang memerlukan pengemaskinian berasaskan ketergantungan boleh menggunakan Make. Oleh itu, definisi yang dikemas kini tentang makefile Fail yang menggambarkan hubungan dan kebergantungan antara fail sesuatu projek, dengan tujuan menentukan apa yang perlu dikemas kini/dikompilasi dalam kes satu atau lebih fail dalam perubahan rantaian ketergantungan. Memahami bagaimana membuat kerja adalah penting bagi mana -mana pemaju C yang bekerja di bawah Linux atau Unix - ya, tawaran Unix komersial juga, walaupun mungkin beberapa versi yang berbeza dari GNU Make, yang merupakan subjek kami. "Versi yang berbeza" bermaksud lebih daripada nombor, ini bermakna BSD Makefile tidak sesuai dengan GNU Makefile. Oleh itu, pastikan anda memasang GNU jika anda tidak berada di kotak Linux.
Di bahagian pertama artikel ini, dan beberapa yang berikutnya, kami menggunakan dan bercakap tentang bahagian-bahagian YEST, sebuah program kecil yang memaparkan tarikh semalam secara lalai, tetapi banyak perkara yang berkaitan dengan tarikh/masa yang berkaitan. Setelah bekerja dengan pengarang, Kimball Hawkins, sebuah Makefile Kecil dilahirkan, yang akan kami bekerjasama.
Pertama, mari kita lihat beberapa asas mengenai makefile. Nama kanonik mestilah gnumakefile, tetapi jika tidak ada fail sedemikian, ia mencari nama seperti makefile dan makefile, dalam perintah itu, atau sebagainya halaman manual. Dengan cara, sudah tentu anda harus membacanya, dan membacanya lagi, kemudian membacanya lagi. Ia tidak sebesar GCC dan anda boleh mempelajari banyak helah berguna yang akan berguna kemudian. Nama yang paling banyak digunakan dalam amalan, bagaimanapun, adalah Makefile, dan saya tidak pernah melihat apa -apa sumber dengan fail bernama GnumakeFile, kebenaran diberitahu. Jika, atas pelbagai sebab, anda perlu menentukan nama lain, gunakan Make's -F, seperti ini:
$ membuat -f mymakefile
Inilah Yest's Makefile, yang boleh anda gunakan untuk menyusun dan memasang program tersebut, kerana ia belum dimuat naik. Walaupun ia hanya program dua fail - sumber dan manpage - anda akan melihat membuat menjadi berguna.
# Makefile untuk menyusun dan memasang yest Uname: = $ (shell uname -s) cc = gcc cflags = -wall cp = cp rm = rm rmflags = -f gzip = gzip version = yest -2.7.0.5 yest: Ifeq ($ (Uname), sunos) $ (cc) -dsunos $ (cflags) -o yest $ (versi).c lain $ (Cc) $ (cflags) -o yest $ (versi).c endif Semua: Yest Pasang Maninstall Pasang: Maninstall $ (CP) Yest/usr/Local/Bin Maninstall: $ (CP) $ (Versi).Man1 yest.1 $ (gzip) yest.1 $ (cp) yest.1.gz/usr/share/man/man1/clean: $ (rm) $ (rmflags) yest yest.1.GZ Deinstall: $ (rm) $ (rmflags)/usr/local/bin/yest/usr/share/man/man1/yest1.Gz
Sekiranya anda melihat dengan teliti pada kod di atas, anda akan melihat dan mempelajari beberapa perkara. Komen bermula dengan hash, dan sejak makefiles dapat menjadi agak misteri, anda lebih baik memberi komen makefiles anda. Kedua, anda boleh mengisytiharkan pembolehubah anda sendiri, dan kemudian anda boleh memanfaatkannya. Seterusnya datang bahagian penting: sasaran. Kata -kata yang diikuti oleh kolon dipanggil sasaran, dan seseorang menggunakannya seperti Buat [-f Makefile Name] Target_name
. Sekiranya anda pernah memasang dari sumber, anda mungkin menaip 'buat pemasangan'. Nah, 'Pasang' adalah salah satu sasaran dalam Makefile, dan sasaran lain yang biasa digunakan termasuk 'bersih', 'deinstall' atau 'semua'. Satu lagi perkara yang paling penting ialah sasaran pertama sentiasa dilaksanakan secara lalai jika tiada sasaran ditentukan. Dalam kes kita, jika saya menaip 'membuat', itu akan bersamaan dengan 'Make Yest', seperti yang anda lihat, yang bermaksud kompilasi bersyarat (jika kita berada di Solaris/Sunos kita memerlukan bendera GCC tambahan) dan penciptaan boleh dilaksanakan bernama 'yest'. Sasaran seperti 'semua' dalam contoh kami tidak melakukan apa -apa dengan sendirinya, hanya memberitahu bahawa mereka bergantung pada fail/sasaran lain yang terkini. Tonton sintaks, ia.
Berikut adalah maklumat ringkas untuk projek yang mempunyai dua fail sumber. Nama fail adalah src1.C dan Src2.c dan nama yang boleh dilaksanakan perlu dilaksanakan. Mudah, betul?
EXEC: SRC1.O src2.o gcc -o exec src1.O src2.O src1.O: SRC1.c gcc -c src1.C SRC2.O: Src2.c gcc -c src2.c
Satu -satunya sasaran yang digunakan secara praktikal, yang juga lalai, adalah 'EXEC'. Ia bergantung pada SRC1.O dan Src2.o, yang seterusnya, bergantung pada masing -masing .C fail. Jadi jika anda mengubah suai, katakan, src2.c, semua yang anda perlu lakukan ialah lari membuat lagi, yang akan melihat bahawa src2.c lebih baru daripada yang lain dan teruskan dengan sewajarnya. Terdapat banyak lagi yang boleh dibuat daripada dilindungi di sini, tetapi tidak ada ruang lagi. Seperti biasa, beberapa kajian diri digalakkan, tetapi jika anda hanya memerlukan fungsi asas, perkara di atas akan melayani anda dengan baik.
Skrip konfigurasi
Biasanya ia bukan hanya 'membuat && membuat pemasangan', kerana sebelum kedua -dua mereka ada satu langkah yang menghasilkan makefile, terutamanya berguna ketika berurusan dengan projek yang lebih besar. Pada asasnya, kata skrip memeriksa bahawa anda mempunyai komponen yang diperlukan untuk kompilasi yang dipasang, tetapi juga mengambil pelbagai argumen yang membantu anda mengubah destinasi fail yang dipasang, dan pelbagai pilihan lain (e.g. Sokongan Fail QT4 atau GTK3, PDF atau CBR, dan sebagainya). Mari kita lihat sekilas apa skrip konfigurasi itu.
Anda biasanya tidak menulis skrip konfigurasi dengan tangan. Anda menggunakan autoconf dan automake untuk ini. Seperti yang dinyatakan oleh nama, apa yang mereka lakukan ialah menjana skrip dan makefiles mengkonfigurasi. Sebagai contoh, dalam contoh sebelumnya dengan program yest, kita sebenarnya boleh menggunakan skrip konfigurasi yang mengesan persekitaran OS dan mengubah beberapa pembolehubah, dan selepas semua yang menghasilkan. Kami telah melihat bahawa pemeriksaan makefile yest jika kita berjalan di sunos, dan jika kita, tambah bendera pengkompil. Saya akan memperluaskannya untuk memeriksa sama ada kita sedang mengusahakan sistem BSD dan jika ya, gunakan Gmake (GNU Make) dan bukannya orang asli yang, seperti yang kita katakan, tidak serasi dengan GNU Makefiles. Kedua -dua perkara ini dilakukan dengan menggunakan autoconf: kami menulis kecil konfigurasikan.dalam
fail di mana kami memberitahu AutoConf apa yang perlu kita periksa, dan biasanya anda ingin menyemak lebih daripada platform OS. Mungkin pengguna tidak mempunyai pengkompil yang dipasang, tidak membuat, tiada perpustakaan pembangunan yang penting dan sebagainya. Sebagai contoh, garis yang akan memeriksa kewujudan masa.h di lokasi header standard sistem akan kelihatan seperti itu:
Ac_check_headers (masa.h)
Kami mengesyorkan anda memulakan dengan aplikasi yang tidak terlalu besar, periksa kandungan tarball sumber dan baca konfigurasi.dalam dan/atau konfigurasikan.Fail AC. Untuk tarballs yang memilikinya, makeFile.AM juga cara yang baik untuk melihat bagaimana fail automake kelihatan. Terdapat beberapa buku yang bagus mengenai perkara itu, dan salah seorang daripada mereka ialah "Projek Mengurus Robert Mecklenburg dengan GNU Make".
Petua GCC dan bendera baris arahan biasa
Saya tahu manual gcc besar dan saya tahu ramai di antara kamu yang tidak membacanya. Saya bangga membaca semuanya (semua yang berkaitan dengan perkakasan IA) dan saya mesti mengakui saya mendapat sakit kepala selepas itu. Sekali lagi, terdapat beberapa pilihan yang perlu anda ketahui, walaupun anda akan belajar lebih banyak semasa anda pergi.
Anda telah menemui bendera -O, yang memberitahu GCC apa yang dihasilkan oleh outfile, dan -c, yang memberitahu GCC untuk tidak menjalankan penghubung, dengan itu menghasilkan apa yang dipasang oleh pemasangan, iaitu objek fail. Bercakap di mana, terdapat pilihan yang mengawal peringkat di mana GCC harus menghentikan pelaksanaan. Jadi untuk berhenti sebelum peringkat pemasangan, selepas penyusunan, gunakan -s. Dalam urat yang sama, -e akan digunakan jika anda mahu menghentikan GCC selepas pra -proses.
Ini adalah amalan yang baik untuk mengikuti standard, jika tidak untuk keseragaman, tetapi untuk tabiat pengaturcaraan yang baik. Sekiranya anda berada dalam tempoh formatif sebagai pemaju C, pilih standard (lihat di bawah) dan ikuti. Bahasa C diseragamkan pertama selepas Kernighan dan Ritchie (RIP) menerbitkan "The C Language Programming" pada tahun 1978. Ia adalah standard bukan formal, tetapi dalam tidak lama lagi digelar K & R dan dihormati. Tetapi sekarang sudah usang dan tidak disyorkan. Kemudian, pada tahun 80 -an dan 90 -an, ANSI dan ISO membangunkan standard rasmi, C89, diikuti oleh C99 dan C11. GCC juga menyokong standard lain, seperti GNUxx, di mana xx boleh menjadi 89 atau 99, sebagai contoh. Semak manual untuk butiran, dan pilihannya adalah '-std =', "dikuatkuasakan" oleh '-pedantic'.
Pilihan yang berkaitan dengan amaran bermula dengan "-w", seperti '-wall' (ia memberitahu GCC untuk membolehkan semua kesilapan, walaupun mereka tidak cukup diaktifkan) atau '-werror' (merawat amaran sebagai kesilapan, selalu disyorkan). Anda boleh lulus hujah tambahan kepada program yang membantu dengan langkah perantara, seperti preprocessor, assembler atau penghubung. Sebagai contoh, inilah cara untuk lulus pilihan kepada penghubung:
$ GCC [Pilihan Lain ...] -wl,pilihan [Namun satu lagi pilihan pilihan ...]
Begitu juga dan intuitif, anda boleh menggunakan 'wa,' untuk pemasangan dan 'wp,' untuk preprocessor. Perhatikan koma dan ruang putih yang memberitahu pengkompil bahawa bahagian preprocessor/assembler/linker telah berakhir. Keluarga pilihan lain yang berguna termasuk '-g' dan rakan-rakan untuk debugging, '-o' dan rakan-rakan untuk pengoptimuman atau '-idirektori' - Tanpa Ruang Putih - Untuk menambah lokasi yang mengandungi header.
Kesimpulan
Saya cadangkan anda meluangkan masa untuk membaca artikel ini, bermain dengan contoh, kemudian tulis sendiri, meningkatkan kerumitan semasa anda pergi.
Inilah yang boleh anda harapkan seterusnya:
- I. C Pembangunan di Linux - Pengenalan
- Ii. Perbandingan antara c dan bahasa pengaturcaraan lain
- Iii. Jenis, pengendali, pembolehubah
- Iv. Kawalan aliran
- V. Fungsi
- Vi. Petunjuk dan tatasusunan
- VII. Struktur
- Viii. Asas I/O
- Ix. Gaya dan cadangan pengekodan
- X. Membina program
- Xi. Pembungkusan untuk Debian dan Fedora
- Xii. Mendapatkan pakej di repositori debian rasmi
Tutorial Linux Berkaitan:
- Perkara yang hendak dipasang di Ubuntu 20.04
- Pengenalan kepada Automasi, Alat dan Teknik Linux
- Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
- Pasang Arch Linux di Workstation VMware
- Tutorial Debugging GDB untuk Pemula
- Advanced Bash Regex dengan contoh
- Sistem Hung Linux? Cara melarikan diri ke baris arahan dan ..
- Manipulasi data besar untuk keseronokan dan keuntungan bahagian 1
- Ungkapan biasa python dengan contoh
- Gelung bash dengan contoh