Perkara pertama yang perlu kami lakukan untuk mencapai matlamat kami yang tinggi ialah membahagikan perisian yang kami bangunkan kepada blok terpencil universal yang seragam dari sudut pandangan pengguna.
Pada bahagian pertama, blok standard seperti itu diterangkan - projek dengan perpustakaan pengepala. Sekarang mari kita tambah perpustakaan yang disusun pada projek kami.
Untuk melakukan ini, mari kita keluarkan pelaksanaan fungsi tersebut myfunc secara berasingan .cpp-fail:
Kemudian kami mentakrifkan perpustakaan untuk disusun (myfeature), yang akan terdiri daripada apa yang diperolehi dalam langkah sebelumnya .cpp-fail. Perpustakaan baharu jelas memerlukan pengepala sedia ada, dan untuk menyediakannya, ia boleh dan harus terikat dengan tujuan sedia ada mylib. Selain itu, hubungan antara mereka adalah awam, yang bermaksud bahawa segala-galanya yang sasaran akan disambungkan myfeature, akan menerima beban dan sasaran secara automatik mylib (lebih lanjut mengenai kaedah mengait).
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 108045c..0de77b8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -64,6 +64,17 @@ target_compile_features(mylib INTERFACE cxx_std_17)
add_library(Mylib::mylib ALIAS mylib)
+###################################################################################################
+##
+## ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°
+##
+###################################################################################################
+
+add_library(myfeature src/mylib/myfeature.cpp)
+target_link_libraries(myfeature PUBLIC mylib)
+
+add_library(Mylib::myfeature ALIAS myfeature)
+
Seterusnya, kami akan memastikan bahawa perpustakaan baharu turut dipasang pada sistem:
Perlu diingatkan bahawa untuk tujuan tersebut myfeature, untuk mylib alias dengan awalan telah dicipta Mylib::. Perkara yang sama ditulis untuk kedua-dua tujuan apabila mengeksportnya untuk pemasangan pada sistem. Ini memungkinkan untuk bekerja secara seragam dengan matlamat untuk mana-mana skema mengikat.
Selepas ini, yang tinggal hanyalah memautkan ujian unit dengan perpustakaan baharu (function myfunc dikeluarkan daripada tajuk, jadi sekarang anda perlu memautkan):
Tajuk (Mylib::mylib) kini anda tidak perlu menyambung secara berasingan, kerana, seperti yang telah disebutkan, ia disambungkan secara automatik bersama-sama dengan perpustakaan (Mylib::myfeature).
Dan mari tambahkan beberapa nuansa untuk memastikan pengukuran liputan dengan mengambil kira perpustakaan yang baru tiba:
Anda boleh menambah lebih banyak perpustakaan, boleh laku, dsb. Tidak kira betapa tepatnya mereka disambungkan antara satu sama lain dalam projek. Satu-satunya perkara yang penting ialah sasaran mana yang merupakan antara muka modul kami, iaitu, ia tetap keluar.
Kini kami mempunyai modul blok standard, dan kami boleh menguasainya: menyusunnya ke dalam struktur apa-apa kerumitan, memasangnya ke dalam sistem atau memautkannya bersama dalam satu sistem pemasangan.
Pemasangan ke dalam sistem
Salah satu pilihan untuk menggunakan modul ialah memasang modul kami ke dalam sistem.
Selepas itu, ia disambungkan ke mana-mana projek lain menggunakan arahan find_package.
find_package(Mylib 1.0 REQUIRED)
Sambungan sebagai submodul
Pilihan lain ialah menyambungkan folder dengan projek kami ke projek lain sebagai submodul menggunakan arahan add_subdirectory.
Gunakan
Kaedah pengikatan adalah berbeza, tetapi hasilnya adalah sama. Dalam kedua-dua kes, matlamat akan tersedia dalam projek menggunakan modul kami Mylib::myfeature ΠΈ Mylib::mylib, yang boleh digunakan, sebagai contoh, seperti ini:
Khususnya dalam kes kami, perpustakaan Mylib::myfeature perlu disambungkan apabila perlu untuk menghubungkan dengan perpustakaan libmyfeature. Sekiranya terdapat pengepala yang mencukupi, maka ia bernilai menggunakan perpustakaan Mylib::mylib.
Sasaran CMake boleh menjadi rumit, contohnya, hanya bertujuan untuk memajukan beberapa sifat, kebergantungan, dsb. Pada masa yang sama, bekerja dengan mereka berlaku dengan cara yang sama.