Katakanlah saya memiliki proyek C ++ yang terbagi dalam beberapa subproyek. Semua subproyek menghasilkan DLL dan tim pengembang yang berbeda mengerjakan setiap subproyek. Sekarang jika saya ingin membangun proyek utama, apakah ada cara untuk menghindari keharusan membangun semua subproyek sendiri?
Singkatnya, saya mencari sesuatu yang melakukan manajemen ketergantungan (yaitu untuk file biner dan header) dengan cara yang sama seperti yang dilakukan Maven untuk Java.
Sebenarnya, saya mencoba menggunakan Maven untuk ini tetapi ini agak rumit karena saya harus membuat paket secara manual dan cukup sering, Maven ketinggalan untuk mengambil perubahan terbaru. Selain itu, menjalankan kompilasi sedikit merepotkan karena saya harus memanggil NAnt dari dalam Maven (saya menggunakan fitur NAnt untuk membangun solusi Visual Studio secara langsung).
Ada petunjuk dan ide tentang cara melakukan ini?
sumber
maven
, Anda melewatkan keseluruhan poinmaven
, atau 10 tahun yang lalu ketika saya tidak menggunakanmaven
untuk C ++, itu jauh kurang berguna untuk C ++. Saya tidak dapat berbicara untuk tahun 2009, tetapi dalam beberapa tahun terakhir dari pengalaman,maven
itulah yang akan Anda gunakan untuk masalah yang Anda gambarkan. Ia melakukan persis apa yang Anda inginkan, dan cukup efisien dan baik, dan tidak melakukan hal-hal negatif yang Anda klaim. Siapa pun yang membaca ini pada tahun 2019 atau yang lebih baru harus sangat mempertimbangkanmaven
untuk menggunakan untuk tujuan ini.Jawaban:
Jawaban Awal : Saya akan menyarankan menggunakan CMake. Ini adalah pembuat file buat multi-platform (menghasilkan proyek Visual Studio atau Eclipse CDT juga).
http://www.cmake.org/
Saya melakukan pengalaman yang sangat bagus dengannya. Hal terbaik yang saya sukai adalah kemampuannya untuk menghasilkan struktur proyek yang umum. Jadi Anda secara umum dapat menyertakan pencarian subproyek untuk pengujian unit dll. Tanpa mengubah skrip setiap saat.
Mereka juga memiliki banyak modul tentang cara menemukan pustaka build yang sudah diinstal sebelumnya, yang diperlukan untuk proyek (seperti Boost, QT, dll.)
Pembaruan : Sementara itu ada beberapa upaya untuk memperkenalkan manajemen paket untuk C ++. Beberapa proyek yang layak untuk dilihat:
Catatan seperti yang ditunjukkan oleh @RAM di komentar cpm tidak lagi aktif dipertahankan.
sumber
Untuk manajemen ketergantungan, ada proyek baru (itu adalah perusahaan startup) yang mengimplementasikan jenis alat ini: https://github.com/biicode (manajer ketergantungan C ++). Anda dapat menambahkan dependensi Anda dan itu akan berfungsi.
Saat ini, nama proyeknya adalah conan.io , mereka diakuisisi oleh JFrog .
PEMBARUAN: Proyek ini mati ... Sayangnya, tampaknya startup tidak bisa mendapatkan cukup pelanggan yang membayar premium, tetapi server tampaknya berfungsi dengan baik ...
UPDATE2: Sepertinya ada proyek pengganti: conan.io (terima kasih @mucaho)
sumber
Saya merekomendasikan sistem build tingkat tinggi berikut:
sumber
Jika Anda hanya ingin manajemen ketergantungan, coba Ivy , ini terintegrasi dengan baik dengan Ant (dan saya berasumsi NAnt dapat melakukan hal yang sama berdasarkan blog ini , yang ditautkan dari situs Ivy).
Ada juga Byldan , versi .Net dari Maven. Tidak tahu seberapa baik itu akan berhasil untuk Anda.
sumber
Make dan GCC adalah kombinasi yang bagus untuk pemeriksaan dependensi yang sangat bagus.
GCC dapat menghasilkan file dependensi 'make' secara otomatis (-MD commandline switch), sehingga dapat membangun kembali semua file sumber yang bergantung pada header tertentu, misalnya.
Saya memiliki beberapa aturan sederhana yang saya potong-n-tempel ke makefile saya:
Sekarang jika file objek Anda dideklarasikan, katakanlah OBJ_C dan daftar OBJ_CPP:
Make tentu saja dapat melacak ketergantungan dengan proyek lain dan semacamnya, misalnya membangun kembali perpustakaan bersama sebagaimana diperlukan, juga.
Misalnya, jika tim Anda yang lain selalu meletakkan DLL terbaru mereka di beberapa folder bersama:
sumber
${CC} ${CFLAGS} -c $< -MD -MF $(<:%.c=%.dep) -o $@
Saya mengalami kesulitan mem-parsing semua simbol Make ini, sepertinya ini menyelesaikan sesuatu sepertig++ -c main.cc -MD -MF test
jika Anda ingin menjalankannya secara mandiri di baris perintah, dan ini menempatkan hasilnya dalam file bernama 'test'.Edit:
Biicode tidak digunakan lagi
Alternatif: Conan.io
sumber
Saya merekomendasikan conan , yang saya gunakan hari ini. Sangat kuat untuk mempertahankan semua pustaka dan binari dependen dalam proyek Anda.
sumber
Anda dapat membuat paket NuGet untuk perpustakaan bekas dan menggunakan NuGet untuk manajemen ketergantungan.
Lihat juga, NuGet untuk C ++
sumber
Ada sejumlah alat yang duduk di atas SCons, menyediakan fungsionalitas tingkat tinggi yang mirip dengan Autotools yang mencoba membuat hidup para pengembang lebih mudah (misalnya WAF, SNOCS). Sayangnya, SCons sendiri memiliki kelemahan utama - waktu kompilasi yang lebih lama untuk proyek-proyek besar.
Saya dapat merekomendasikan untuk mencoba SNOCS (yang merupakan SCons terbalik) bagi Anda yang mencari manajemen ketergantungan yang mudah dan memilih opsi kompilasi dalam satu perintah (kompilator, x86 / x64, Debug / Rilis, perpustakaan statis / bersama, tes / memasang target, dll.).
SNOCS juga mencoba untuk mengatasi masalah waktu kompilasi yang lama dengan menyimpan keluaran konfigurasi proyek dalam file terpisah, yang memungkinkan build konsekuen melewati fase konfigurasi sama sekali dan langsung ke fase pembangunan (fitur terakhir sedang dibangun sekarang)
Konfigurasi CMake menjadi membosankan dalam solusi yang lebih besar, sehingga pemeliharaan sistem build membutuhkan banyak waktu pengembang. Untungnya, seperti yang telah disebutkan Martijn, ada biicode yang "menggunakan CMake untuk menghasilkan proyek Anda dengan dependensinya".
sumber
Coba SCons
SCons adalah alat konstruksi perangkat lunak Open Source — yaitu, alat build generasi berikutnya. Pikirkan SCons sebagai pengganti lintas platform yang ditingkatkan untuk utilitas Make klasik dengan fungsionalitas terintegrasi yang mirip dengan autoconf / automake dan cache kompiler seperti ccache. Singkatnya, SCons adalah cara yang lebih mudah, lebih andal, dan lebih cepat untuk membangun perangkat lunak.
sumber
Saya merekomendasikan untuk menggunakan ibu dari semua sistem ketergantungan build: make.
sumber
Coba scon, Anda akan ketagihan. Membuat sudah ketinggalan zaman, sulit dan mahal perawatannya.
sumber