Panduan terkini mengenai kompilasi program C menggunakan Make telah mencetuskan perbincangan hangat dalam kalangan pembangun tentang sistem binaan, pengurusan kebergantungan, dan relevan berterusan alat-alat berusia beberapa dekad dalam pembangunan perisian moden.
Pembolehubah Persekitaran dan Bendera Kompiler Menimbulkan Kekeliruan
Komuniti telah menyerlahkan kekeliruan yang ketara mengenai pembolehubah persekitaran Make , terutamanya CPPFLAGS dan CXXFLAGS. Ramai pembangun tersalah anggap bahawa kedua-duanya mempunyai tujuan yang serupa, tetapi sebenarnya mereka agak berbeza. CPPFLAGS mengendalikan pilihan C preprocessor tanpa mengira bahasa, manakala CXXFLAGS secara khusus menyasarkan kompilasi C++. Perbezaan ini menjadi penting ketika menyelesaikan masalah kompilasi, terutamanya pada macOS di mana laluan kebergantungan sering memerlukan spesifikasi manual.
Perbincangan ini juga mendedahkan bahawa susunan bendera linker amat penting dalam senario static linking, walaupun keperluan ini hilang dengan dynamic linking. Nuansa teknikal ini telah mengejutkan ramai pembangun, membawa kepada kegagalan binaan yang misteri yang nampaknya berfungsi pada sesetengah sistem tetapi tidak pada yang lain.
Nota: C preprocessor (cpp) adalah alat yang memproses kod sumber sebelum kompilasi, mengendalikan tugas-tugas seperti memasukkan fail header dan mengembangkan makro.
Pembolehubah Persekitaran Make Utama:
CPPFLAGS
: Bendera pemproses C (untuk lokasi fail header)CXXFLAGS
: Bendera pengkompil C++LDFLAGS
: Bendera penghubung yang diletakkan sebelum fail objekLDLIBS
: Bendera perpustakaan (seperti -lssl -ldl) yang diletakkan selepas fail objek
Make sebagai Antara Muka Universal Mendapat Sambutan
Trend menarik telah muncul di mana pembangun menggunakan Make sebagai antara muka piawai merentasi bahasa pengaturcaraan dan projek yang berbeza. Daripada mengingati pelbagai arahan binaan khusus bahasa, banyak pasukan kini melaksanakan sasaran Make yang konsisten seperti make format
, make lint
, dan make build
tanpa mengira sama ada mereka bekerja dengan Go , Rust , Python , atau bahasa lain.
Pendekatan ini menangani kekecewaan biasa di mana projek berhijrah antara sistem binaan yang berbeza dari masa ke masa. Walaupun alat asas mungkin berubah dari satu pengurus pakej kepada yang lain, arahan Make peringkat tinggi kekal malar, mengurangkan beban kognitif untuk pembangun yang bertukar antara projek.
Sasaran Make Biasa Merentasi Bahasa:
make format
: Pemformatan kodmake lint
: Analisis/linting kodmake build
: Membina projekmake docker_build
: Membina bekas Dockermake docker_run
: Menjalankan bekas Dockermake install_deps
: Memasang kebergantungan
Pengurusan Kebergantungan Kekal sebagai Kelemahan Utama C
Perbincangan komuniti telah mengukuhkan bahawa kekurangan pengurus kebergantungan terbina dalam C terus menjadi masalah utama. Walaupun sesetengah berpendapat bahawa pengurus pakej sistem seperti apt atau homebrew memainkan peranan ini, yang lain menunjuk kepada penyelesaian baharu seperti Conan dan vcpkg sebagai alternatif yang muncul.
Walau bagaimanapun, ramai pembangun C berpengalaman sebenarnya melihat ini sebagai ciri dan bukannya pepijat. Projek kompleks sering melibatkan pelbagai bahasa pengaturcaraan, menjadikan pengurus kebergantungan khusus bahasa berpotensi memudaratkan proses binaan keseluruhan. Pendekatan pengurusan kebergantungan manual, walaupun lebih banyak kerja pada awalnya, memberikan kawalan dan ketelusan yang lebih besar.
Penyelesaian Pengurusan Kebergantungan C:
- Pengurus Pakej Sistem: apt, homebrew, dnf, pacman
- Alat Khusus C: Conan, vcpkg
- Pengurusan Manual: Pendekatan tradisional dengan pemasangan perpustakaan secara manual
- Binaan Berbekas: Penggabungan kebergantungan berasaskan Docker
Sistem Binaan Alternatif Mencabar Dominasi Make
Perbincangan telah mendedahkan minat yang semakin meningkat terhadap alternatif kepada Make tradisional. Sesetengah pembangun menyokong sistem mk Plan 9 , memuji sintaks yang lebih bersih dan pembolehubah automatik yang lebih deskriptif. Yang lain mencadangkan bahawa alat moden seperti CMake , walaupun mempunyai kerumitan tersendiri, menawarkan sokongan merentas platform dan pengendalian kebergantungan yang lebih baik.
Tiada orang lain tahu bagaimana ia berfungsi, itulah sebabnya setiap skrip configure memeriksa kompiler fortran yang berfungsi.
Sentimen ini mengenai autotools mencerminkan kekecewaan yang lebih luas dengan sistem binaan warisan yang telah mengumpul kerumitan dan kes tepi selama beberapa dekad.
Docker Muncul sebagai Penyelesaian Persekitaran Binaan
Penyelesaian praktikal yang semakin popular melibatkan penggunaan bekas Docker untuk menyediakan persekitaran binaan yang konsisten. Pendekatan ini menggabungkan kompiler dan kebergantungan ke dalam bekas yang boleh dihasilkan semula, menghapuskan masalah berfungsi pada mesin saya yang melanda kompilasi C merentasi sistem yang berbeza.
Walau bagaimanapun, strategi ini menghadapi batasan dengan static linking, terutamanya pada sistem yang menggunakan glibc, yang tidak menyokong sepenuhnya kompilasi statik. Kekangan teknikal ini bermakna bahawa binaan dalam bekas tidak selalu menghasilkan binari yang benar-benar mudah alih.
Perdebatan yang berterusan mencerminkan ketegangan yang lebih luas dalam pembangunan perisian antara mengekalkan keserasian dengan alat yang telah ditetapkan dan menerima alternatif moden yang menjanjikan pengalaman pembangun yang lebih baik. Walaupun Make menghampiri ulang tahunnya yang ke-50, komuniti kekal berpecah sama ada umur panjangnya mewakili kebolehpercayaan yang terbukti atau hutang teknikal yang terkumpul.
Rujukan: Using make
to compile C programs (for non-C-programmers)