Ngeli xesha siya kongeza ithala leencwadi elihlanganisiweyo kuyo, kwaye sithethe malunga nokudibanisa iimodyuli enye kwenye.
Njengangaphambili, abo bangenamonde banako ngoko nangoko
yiya kwindawo yokugcina ehlaziyiweyo kwaye ubambe yonke into ngezandla zakho.
Iziqulatho
Yahlula
Into yokuqala ekufuneka siyenzile ukufezekisa injongo yethu ephezulu kukwahlulahlula isoftware esiyiphuhlisayo ibe ziibhloko ezizimeleyo, ezizimeleyo ezifanayo ngokwembono yomsebenzisi.
Kwinxalenye yokuqala, ibhloko enjalo eqhelekileyo yachazwa - iprojekthi enelayibrari yentloko. Ngoku masenze ithala leencwadi elihlanganisiweyo kwiprojekthi yethu.
Ukwenza oku, makhe sithathe ukuphunyezwa komsebenzi myfunc
ngokwahlukileyo .cpp
-ifayile:
diff --git a/include/mylib/myfeature.hpp b/include/mylib/myfeature.hpp
index 43db388..ba62b4f 100644
--- a/include/mylib/myfeature.hpp
+++ b/include/mylib/myfeature.hpp
@@ -46,8 +46,5 @@ namespace mylib
~ see mystruct
*/
- inline bool myfunc (mystruct)
- {
- return true;
- }
+ bool myfunc (mystruct);
}
diff --git a/src/mylib/myfeature.cpp b/src/mylib/myfeature.cpp
new file mode 100644
index 0000000..abb5004
--- /dev/null
+++ b/src/mylib/myfeature.cpp
@@ -0,0 +1,9 @@
+#include <mylib/myfeature.hpp>
+
+namespace mylib
+{
+ bool myfunc (mystruct)
+ {
+ return true;
+ }
+}
Emva koko sichaza ithala leencwadi eliza kuqulunqwa (myfeature
), eya kubandakanya into efunyenwe kwisinyathelo sangaphambili .cpp
-ifayile. Ithala leencwadi elitsha ngokucacileyo lifuna iiheader ezikhoyo, kwaye ukuze kubonelelwe ngoku, linokuthi kwaye libotshelelwe kwinjongo ekhoyo. mylib
. Ngaphezu koko, uxhulumaniso phakathi kwabo luluntu, oku kuthetha ukuba yonke into ekujoliswe kuyo iya kudibaniswa myfeature
, iya kufumana ngokuzenzekelayo umthwalo kunye nethagethi mylib
(
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)
+
Okulandelayo, siya kuqinisekisa ukuba ithala leencwadi elitsha lifakwe kwisistim:
@@ -72,7 +83,7 @@ add_library(Mylib::mylib ALIAS mylib)
install(DIRECTORY include/mylib DESTINATION include)
-install(TARGETS mylib EXPORT MylibConfig)
+install(TARGETS mylib myfeature EXPORT MylibConfig)
install(EXPORT MylibConfig NAMESPACE Mylib:: DESTINATION share/Mylib/cmake)
include(CMakePackageConfigHelpers)
Kufuneka kuqatshelwe ukuba injongo myfeature
, ngoko mylib
isibizo esinesimaphambili senziwe Mylib::
. Okufanayo kubhalwe kuzo zombini iinjongo xa uthumela ngaphandle ukuze ufakelwe kwisixokelelwano. Oku kwenza kube lula ukusebenza ngokufanayo kunye neenjongo kuyo nayiphi na
Emva koku, okuseleyo kukudibanisa iimvavanyo zeyunithi nethala leencwadi elitsha (umsebenzi myfunc
ikhutshwe kwisihloko, ke ngoku kufuneka udibanise):
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 5620be4..bc1266c 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -4,7 +4,7 @@ add_executable(mylib-unit-tests test_main.cpp)
target_sources(mylib-unit-tests PRIVATE mylib/myfeature.cpp)
target_link_libraries(mylib-unit-tests
PRIVATE
- Mylib::mylib
+ Mylib::myfeature
doctest::doctest
)
Izihloko (Mylib::mylib
) ngoku awudingi kudibanisa ngokwahlukeneyo, kuba, njengoko sele kukhankanyiwe, ziqhagamshelwe ngokuzenzekelayo kunye nethala leencwadi (Mylib::myfeature
).
Kwaye songeze iinuances ezimbalwa zokuqinisekisa imilinganiselo yokhuselo ethathela ingqalelo ithala leencwadi elitsha elifikileyo:
@@ -15,11 +15,16 @@ if(MYLIB_COVERAGE AND GCOVR_EXECUTABLE)
target_compile_options(mylib-unit-tests PRIVATE --coverage)
target_link_libraries(mylib-unit-tests PRIVATE gcov)
+ target_compile_options(myfeature PRIVATE --coverage)
+ target_link_libraries(myfeature PRIVATE gcov)
+
add_custom_target(coverage
COMMAND
${GCOVR_EXECUTABLE}
- --root=${PROJECT_SOURCE_DIR}/include/
- --object-directory=${CMAKE_CURRENT_BINARY_DIR}
+ --root=${PROJECT_SOURCE_DIR}/
+ --filter=${PROJECT_SOURCE_DIR}/include
+ --filter=${PROJECT_SOURCE_DIR}/src
+ --object-directory=${PROJECT_BINARY_DIR}
DEPENDS
check
)
Unokongeza iilayibrari ezininzi, eziphunyeziweyo, njl. Akukhathaliseki ukuba ziqhagamshelwe kangakanani na phakathi kweprojekthi. Eyona nto ibalulekileyo kukuba zeziphi iithagethi lujongano lwemodyuli yethu, oko kukuthi, zincamathele.
Yoyisa
Ngoku sineemodyuli zebhloko eziqhelekileyo, kwaye sinokuzilawula: zidibanise kwisakhiwo sayo nayiphi na into enzima, ukuyifaka kwisistim okanye ukudibanisa kunye ngaphakathi kwenkqubo yendibano enye.
Ufakelo kwisixokelelwano
Enye yeenketho zokusebenzisa imodyuli kukufaka imodyuli yethu kwisistim.
cmake --build ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ --target install
Emva koko, idityaniswe kuyo nayiphi na enye iprojekthi isebenzisa umyalelo find_package
find_package(Mylib 1.0 REQUIRED)
Uqhagamshelwano njengemodyuli engaphantsi
Enye inketho kukudibanisa ifolda kunye neprojekthi yethu kwenye iprojekthi njengemodyuli engaphantsi usebenzisa umyalelo add_subdirectory
Sebenzisa
Iindlela zokubopha zahlukile, kodwa umphumo uyafana. Kuzo zombini ezi meko, iinjongo ziya kufumaneka kwiprojekthi kusetyenziswa imodyuli yethu Mylib::myfeature
ΠΈ Mylib::mylib
, enokusetyenziswa, umzekelo, ngolu hlobo:
add_executable(some_executable some.cpp sources.cpp)
target_link_libraries(some_executable PRIVATE Mylib::myfeature)
Ngokukodwa kwimeko yethu, ithala leencwadi Mylib::myfeature
kufuneka idityaniswe xa kukho imfuneko yokudibanisa nethala leencwadi libmyfeature
. Ukuba kukho izihloko ezaneleyo, ngoko kuyafaneleka ukusebenzisa ithala leencwadi Mylib::mylib
.
Iithagethi zeCMake zinokukhohlisa, umzekelo, zijolise kuphela ukuhambisa ezinye iipropathi, ukuxhomekeka, njl. Kwangaxeshanye, ukusebenza nabo kwenzeka ngendlela efanayo.
Nantso into ebesiyidinga.
umthombo: www.habr.com