Hal pertama yang perlu kita lakukan untuk mencapai tujuan luhur kita adalah membagi perangkat lunak yang kita kembangkan menjadi blok-blok universal dan terisolasi yang seragam dari sudut pandang pengguna.
Bagian pertama menjelaskan blok standar seperti itu - sebuah proyek dengan perpustakaan header. Sekarang mari tambahkan perpustakaan terkompilasi ke proyek kita.
Untuk melakukan ini, mari kita lakukan implementasi fungsinya myfunc secara terpisah .cpp-mengajukan:
Kemudian kita mendefinisikan perpustakaan yang akan dikompilasi (myfeature), yang terdiri dari apa yang diperoleh pada langkah sebelumnya .cpp-mengajukan. Perpustakaan baru jelas memerlukan header yang ada, dan untuk menyediakannya, perpustakaan dapat dan harus dikaitkan dengan tujuan yang ada mylib. Apalagi hubungan di antara mereka bersifat publik, artinya segala sesuatu yang menjadi target akan terhubung myfeature, secara otomatis akan menerima beban dan target mylib (lebih lanjut tentang metode merajut).
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)
+
Selanjutnya, kami akan memastikan bahwa perpustakaan baru juga terinstal di sistem:
Perlu dicatat bahwa untuk tujuan tersebut myfeature, adapun mylib alias dengan awalan telah dibuat Mylib::. Hal yang sama ditulis untuk kedua tujuan saat mengekspornya untuk instalasi pada sistem. Hal ini memungkinkan untuk bekerja secara seragam dengan tujuan apa pun skema pengikatan.
Setelah ini, yang tersisa hanyalah menghubungkan pengujian unit dengan perpustakaan baru (function myfunc diambil dari judulnya, jadi sekarang Anda perlu menautkan):
Judul (Mylib::mylib) sekarang Anda tidak perlu terhubung secara terpisah, karena seperti yang telah disebutkan, mereka secara otomatis terhubung dengan perpustakaan (Mylib::myfeature).
Dan mari tambahkan beberapa nuansa untuk memastikan pengukuran cakupan dengan mempertimbangkan perpustakaan yang baru hadir:
Anda dapat menambahkan lebih banyak perpustakaan, executable, dll. Tidak peduli bagaimana tepatnya mereka terhubung satu sama lain dalam proyek. Satu-satunya hal yang penting adalah target mana yang menjadi antarmuka modul kita, yaitu target yang menonjol.
Sekarang kami memiliki modul blok standar, dan kami dapat mendominasinya: menyusunnya menjadi struktur dengan kompleksitas apa pun, memasangnya ke dalam suatu sistem, atau menghubungkannya bersama-sama dalam satu sistem perakitan.
Instalasi ke dalam sistem
Salah satu opsi untuk menggunakan modul ini adalah dengan menginstal modul kami ke dalam sistem.
Setelah itu, terhubung ke proyek lain menggunakan perintah find_package.
find_package(Mylib 1.0 REQUIRED)
Koneksi sebagai submodul
Pilihan lainnya adalah menghubungkan folder dengan proyek kita ke proyek lain sebagai submodul menggunakan perintah add_subdirectory.
Menggunakan
Cara mengikatnya berbeda-beda, tetapi hasilnya sama. Dalam kedua kasus tersebut, tujuan akan tersedia dalam proyek menggunakan modul kami Mylib::myfeature ΠΈ Mylib::mylib, yang dapat digunakan misalnya seperti ini:
Khususnya dalam kasus kami, perpustakaan Mylib::myfeature perlu dihubungkan ketika diperlukan untuk menghubungkan dengan perpustakaan libmyfeature. Jika headernya cukup, maka ada baiknya menggunakan perpustakaan Mylib::mylib.
Target CMake bisa jadi rumit, misalnya, dimaksudkan hanya untuk meneruskan beberapa properti, dependensi, dll. Pada saat yang sama, bekerja dengan mereka terjadi dengan cara yang sama.