C ++ uye CMake - hama zvachose, chikamu II

C ++ uye CMake - hama zvachose, chikamu II

Muchikamu chakapfuura Iyi nyaya inonakidza yakataura nezve kuronga raibhurari yemusoro mukati meCMake kuvaka system jenareta.

Panguva ino tichawedzera raibhurari yakaunganidzwa kwairi, uye zvakare kutaura nezve kubatanidza mamodule kune mumwe nemumwe.

Sekare, avo vasina kushivirira vanogona pakarepo enda kune yakagadziridzwa repository uye bata zvinhu zvose nemaoko ako.


Zviri mukati

  1. Divide
  2. Kunda

Divide

Chinhu chekutanga chatinofanira kuita kuti tizadzikise chinangwa chedu chakakwirira kupatsanura software yatinogadzira kuita mabhuroko epasirese, ari ega akafanana nemaonero emushandisi.

Muchikamu chekutanga, iyo yakajairwa block yakatsanangurwa - chirongwa chine musoro raibhurari. Zvino ngatiwedzerei raibhurari yakaunganidzwa kupurojekiti yedu.

Kuti tiite izvi, ngatitorei kushandiswa kwebasa racho myfunc mune imwe yakasiyana .cpp-faira:

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

Zvadaro tinotsanangura raibhurari inofanira kuumbwa (myfeature), iyo ichange iine izvo zvakawanikwa munhanho yapfuura .cpp-file. Iyo raibhurari nyowani sezviri pachena inoda misoro iripo, uye kuti ipe izvi, inogona uye inofanirwa kusungirirwa kune chinangwa chiripo. mylib. Uyezve, hukama pakati pavo huri pachena, zvinoreva kuti zvose izvo chinangwa chichabatanidzwa myfeature, inongogamuchira mutoro uye chinangwa mylib (zvakawanda pamusoro pekuruka nzira).

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

Tevere, isu tinoita shuwa kuti raibhurari nyowani yakaiswa zvakare pane system:

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

Zvinofanira kucherechedzwa kuti chinangwa myfeature, nezve mylib zita rine chivakashure rakagadzirwa Mylib::. Izvo zvakafanana zvinonyorerwa kune ese ari maviri zvinangwa paunenge uchiatumira kunze kuti zviisiswe pane system. Izvi zvinoita kuti zvikwanise kushanda zvakafanana nezvinangwa kune chero kusunga chirongwa.

Mushure meizvi, chasara kubatanidza bvunzo dzeyuniti neraibhurari nyowani (basa myfunc yakabviswa kunze kwezita, saka ikozvino iwe unofanirwa kubatanidza):

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
 )

Misoro (Mylib::mylib) ikozvino haufanire kubatanidza zvakasiyana, nekuti, sezvatotaurwa, ivo vanobatanidzwa otomatiki pamwe neraibhurari (Mylib::myfeature).

Uye ngatiwedzerei akati wandei kuti tive nechokwadi chekuvhara zviyero tichifunga nezve raibhurari ichangosvika:

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

Iwe unogona kuwedzera mamwe maraibhurari, executables, nezvimwe. Izvo hazvina basa kuti zvakanyatsobatanidzwa sei kune mumwe nemumwe mukati meprojekiti. Chinhu chega chakakosha ndechekuti ndezvipi zvinonangwa ndeye interface yemodule yedu, kureva kuti, vanomira kunze.

Kunda

Iye zvino tave neyakajairwa block modules, uye isu tinokwanisa kuatonga: kuanyora muchimiro chechero kuoma, kuaisa muhurongwa kana kuabatanidza pamwechete mukati memusangano mumwe chete.

Kuiswa muhurongwa

Imwe yesarudzo yekushandisa module ndeyekuisa yedu module muhurongwa.

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

Mushure meizvozvo, yakabatana kune chero imwe chirongwa uchishandisa murairo find_package.

find_package(Mylib 1.0 REQUIRED)

Kubatanidza se submodule

Imwe sarudzo ndeyekubatanidza folda nepurojekiti yedu kune imwe purojekiti se submodule uchishandisa rairo add_subdirectory.

Shandisa

Nzira dzekubatanidza dzakasiyana, asi mhedzisiro yacho yakafanana. Muzviitiko zvese izvi, zvinangwa zvichave zviripo muprojekiti uchishandisa module yedu Mylib::myfeature ΠΈ Mylib::mylib, iyo inogona kushandiswa, semuenzaniso, seizvi:

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

Kunyanya kwatiri, raibhurari Mylib::myfeature inoda kubatanidzwa pazvinenge zvakakodzera kubatanidza neraibhurari libmyfeature. Kana pane zvakakwana misoro, saka zvakakodzera kushandisa raibhurari Mylib::mylib.

CMake tarisiro inogona kuve inonyengerera, semuenzaniso, inongoitirwa kuendesa zvimwe zvivakwa, zvinoenderana, nezvimwe. Panguva imwecheteyo, kushanda navo kunoitika nenzira imwecheteyo.

Ndizvo zvataifanira kuwana.

Source: www.habr.com

Voeg