C++ ndi CMake - abale kwamuyaya, gawo II

C++ ndi CMake - abale kwamuyaya, gawo II

Mu gawo lapitalo Nkhani yosangalatsayi idakamba za kukonza laibulale yamutu mkati mwa CMake build system jenereta.

Nthawi ino tiwonjezera laibulale yophatikizidwa kwa iyo, ndikulankhulanso za kulumikizana ma module wina ndi mnzake.

Monga kale, anthu osaleza mtima angathe mwamsanga kupita ku malo osinthidwa ndi kukhudza chirichonse ndi manja anu.


Zamkatimu

  1. Gawani
  2. Gonjetsani

Gawani

Chinthu choyamba chimene tiyenera kuchita kuti tikwaniritse cholinga chathu chokwezeka ndicho kugawa mapulogalamu omwe timapanga kuti akhale otalikirana ndi onse, omwe ali ofanana ndi momwe wogwiritsa ntchito amawonera.

Mu gawo loyamba, chipika choterechi chinafotokozedwa - pulojekiti yokhala ndi laibulale yamutu. Tsopano tiyeni tiwonjezere laibulale yophatikizidwa ku polojekiti yathu.

Kuti tichite izi, tsatirani ndondomeko ya ntchitoyo myfunc mosiyana .cpp-fayilo:

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;
+    }
+}

Kenako timatanthauzira laibulale yomwe iyenera kupangidwa (myfeature), zomwe zizikhala ndi zomwe zidapezedwa mu gawo lapitalo .cpp-fayilo. Laibulale yatsopanoyo mwachiwonekere imafuna mitu yomwe ilipo, ndipo kuti ipereke izi, ingathe ndipo iyenera kugwirizana ndi zomwe zilipo kale. mylib. Komanso, mgwirizano pakati pawo ndi wapagulu, zomwe zikutanthauza kuti chilichonse chomwe chandamale chidzalumikizidwa myfeature, ingolandira katunduyo ndi chandamale mylib (zambiri za njira zoluka).

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)
+

Kenako, tiwonetsetsa kuti laibulale yatsopanoyi idayikidwanso padongosolo:

@@ -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)

Kuyenera kudziΕ΅ika kuti cholinga myfeature, pa mylib dzina lodziwika ndi chiyambi linapangidwa Mylib::. Zomwezo zimalembedwa pazifukwa zonse ziwiri pozitumiza kunja kuti zikhazikitsidwe padongosolo. Izi zimapangitsa kuti zikhale zotheka kugwira ntchito mofanana ndi zolinga za aliyense ndondomeko yomanga.

Pambuyo pake, chomwe chatsala ndikulumikiza mayeso a unit ndi laibulale yatsopano (function myfunc kuchotsedwa pamutu, ndiye tsopano muyenera kulumikizana):

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
 )

Mitu (Mylib::mylib) tsopano simukufunika kulumikiza padera, chifukwa, monga tanenera kale, zimangolumikizidwa ndi laibulale (Mylib::myfeature).

Ndipo tiyeni tiwonjezeko ma nuances angapo kuti tiwonetsetse zoyeserera poganizira laibulale yomwe yangobwera kumene:

@@ -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
     )

Mutha kuwonjezera malaibulale ambiri, zoyeserera, ndi zina. Zilibe kanthu momwe amalumikizidwira wina ndi mnzake mkati mwa polojekitiyo. Chofunikira chokha ndichakuti zolinga zomwe zili ndi mawonekedwe a module yathu, ndiye kuti, zimatuluka.

Gonjetsani

Tsopano tili ndi ma module a block block, ndipo titha kuwalamulira: kuwapanga kukhala mawonekedwe azovuta zilizonse, kuwayika mu dongosolo kapena kuwalumikiza pamodzi mkati mwa dongosolo limodzi la msonkhano.

Kuyika mu dongosolo

Chimodzi mwazosankha zogwiritsira ntchito module ndikuyika gawo lathu mudongosolo.

cmake --build ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ --target install

Pambuyo pake, imalumikizidwa ndi polojekiti ina iliyonse pogwiritsa ntchito lamulo find_package.

find_package(Mylib 1.0 REQUIRED)

Kulumikizana ngati submodule

Njira ina ndikugwirizanitsa chikwatu ndi polojekiti yathu ku polojekiti ina monga submodule pogwiritsa ntchito lamulo add_subdirectory.

Gwiritsani ntchito

Njira zomangira ndizosiyana, koma zotsatira zake ndi zofanana. Muzochitika zonsezi, zolinga zidzapezeka mu polojekiti pogwiritsa ntchito gawo lathu Mylib::myfeature ΠΈ Mylib::mylib, zomwe zingagwiritsidwe ntchito, mwachitsanzo, monga chonchi:

add_executable(some_executable some.cpp sources.cpp)
target_link_libraries(some_executable PRIVATE Mylib::myfeature)

Makamaka kwa ife, laibulale Mylib::myfeature ziyenera kulumikizidwa pakufunika kulumikizana ndi laibulale libmyfeature. Ngati pali mitu yokwanira, ndiye kuti ndibwino kugwiritsa ntchito laibulale Mylib::mylib.

Zolinga za CMake zitha kukhala zachinyengo, mwachitsanzo, zongofuna kutumiza katundu wina, zodalira, ndi zina. Nthawi yomweyo, kugwira nawo ntchito kumachitika chimodzimodzi.

Ndi zomwe timafunikira kuti tipeze.

Source: www.habr.com

Kuwonjezera ndemanga