Kulokhu sizokwengeza umtapo wolwazi ohlanganisiwe kuwo, futhi siphinde sikhulume ngokuxhumanisa amamojula.
Njengangaphambili, labo abangenasineke bangakwazi ngokushesha
iya endaweni yokugcina ebuyekeziwe futhi uthinte yonke into ngezandla zakho.
Okuqukethwe
Hlukanisa
Into yokuqala okudingeka siyenze ukuze sifinyelele umgomo wethu ophezulu ukuhlukanisa isofthiwe esiyithuthukisayo ibe amabhulokhi ahlukene, angawodwa afanayo ngokombono womsebenzisi.
Engxenyeni yokuqala, i-block standard enjalo yachazwa - iphrojekthi enomtapo wezincwadi wekhanda. Manje ake sengeze umtapo wolwazi ohlanganisiwe kuphrojekthi yethu.
Ukuze wenze lokhu, ake sikhiphe ukuqaliswa komsebenzi myfunc
ngokwehlukana .cpp
-ifayela:
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;
+ }
+}
Bese sichaza umtapo wolwazi ozohlanganiswa (myfeature
), okuzoqukatha lokho okutholwe esinyathelweni sangaphambilini .cpp
-ifayela. Umtapo wolwazi omusha ngokusobala udinga izihloko ezikhona, futhi ukuze unikeze lokhu, ungakwazi futhi kufanele uhlanganiswe nenhloso ekhona. mylib
. Ngaphezu kwalokho, ukuxhumana phakathi kwabo kusesidlangalaleni, okusho ukuthi konke okuhlosiwe kuzoxhunywa myfeature
, izothola ngokuzenzakalelayo umthwalo 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, sizoqinisekisa ukuthi umtapo wolwazi omusha nawo ufakiwe ohlelweni:
@@ -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)
Kufanele kuqashelwe ukuthi ngenhloso myfeature
, ngokwe mylib
kwakhiwe isibizo esinesiqalo Mylib::
. Okufanayo kubhalelwe izinhloso zombili lapho uzithumela ukuze zifakwe ohlelweni. Lokhu kwenza kube nokwenzeka ukusebenza ngokufanayo nemigomo yanoma iyiphi
Ngemva kwalokhu, okusele nje ukuxhumanisa ukuhlolwa kweyunithi nomtapo wolwazi omusha (function myfunc
ikhishwe esihlokweni, ngakho-ke manje udinga ukuxhumanisa):
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
) manje awudingi ukuxhuma ngokwehlukana, ngoba, njengoba sekushiwo, zixhumeke ngokuzenzakalelayo kanye nomtapo wolwazi (Mylib::myfeature
).
Futhi ake sengeze ama-nuances ambalwa ukuze siqinisekise izilinganiso zokufakwa kucatshangelwa umtapo osanda kufika:
@@ -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
)
Ungangeza amalabhulali amaningi, okusebenzisekayo, njll. Akukhathalekile ukuthi zixhumene kanjani ngqo phakathi kwephrojekthi. Okuwukuphela kwento ebalulekile ukuthi yiziphi izinhloso okuyi-interface yemojula yethu, okungukuthi, ziphuma ngaphandle.
Nqoba
Manje sesinamamojula ajwayelekile ebhulokhi, futhi singawabusa: awahlanganise abe isakhiwo sanoma iyiphi inkimbinkimbi, siwafake ohlelweni noma siwaxhumanise phakathi kwesistimu yomhlangano owodwa.
Ukufakwa ohlelweni
Enye yezinketho zokusebenzisa imojuli ukufaka imojula yethu ohlelweni.
cmake --build ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ --target install
Ngemva kwalokho, ixhunywe kunoma iyiphi enye iphrojekthi kusetshenziswa umyalo find_package
find_package(Mylib 1.0 REQUIRED)
Ukuxhumana njengemojuli engezansi
Enye inketho ukuxhuma ifolda nephrojekthi yethu kwenye iphrojekthi njenge-submodule usebenzisa umyalo add_subdirectory
Sebenzisa
Izindlela zokubopha zihlukile, kodwa umphumela uyafana. Kuzo zombili izimo, imigomo izotholakala kuphrojekthi kusetshenziswa imojula yethu Mylib::myfeature
ΠΈ Mylib::mylib
, engasetshenziswa, isibonelo, kanje:
add_executable(some_executable some.cpp sources.cpp)
target_link_libraries(some_executable PRIVATE Mylib::myfeature)
Ikakhulukazi esimweni sethu, umtapo wolwazi Mylib::myfeature
kudingeka uxhumeke lapho kudingekile ukuxhumana nomtapo wolwazi libmyfeature
. Uma kunezihloko ezanele, khona-ke kufanelekile ukusebenzisa umtapo wolwazi Mylib::mylib
.
Izinhloso ze-CMake zingakhohlisa, ngokwesibonelo, zihloselwe kuphela ukudlulisa ezinye izakhiwo, okuncikile, njll. Ngesikhathi esifanayo, ukusebenza nabo kwenzeka ngendlela efanayo.
Yilokho ebesikudinga ukuze sikuthole.
Source: www.habr.com