C ++ ati CMake - awọn arakunrin lailai, apakan II

C ++ ati CMake - awọn arakunrin lailai, apakan II

Ni apakan ti tẹlẹ Itan idanilaraya yii sọrọ nipa siseto ile-ikawe akọsori laarin olupilẹṣẹ eto Kọ CMake.

Ni akoko yii a yoo ṣafikun ile-ikawe ti o ṣajọ si rẹ, ati tun sọrọ nipa sisopọ awọn modulu pẹlu ara wọn.

Gẹgẹbi tẹlẹ, awọn ti ko ni suuru le lẹsẹkẹsẹ lọ si ibi ipamọ imudojuiwọn ki o si fi ọwọ kan ohun gbogbo.


Awọn akoonu

  1. Pinpin
  2. Ṣẹgun

Pinpin

Ohun akọkọ ti a nilo lati ṣe lati ṣaṣeyọri ibi-afẹde giga wa ni lati pin sọfitiwia ti a dagbasoke si gbogbo agbaye, awọn bulọọki ti o ya sọtọ ti o jẹ aṣọ lati oju wiwo olumulo.

Ni apakan akọkọ, iru bulọọki boṣewa ni a ṣe apejuwe - iṣẹ akanṣe kan pẹlu ile-ikawe akọsori kan. Bayi jẹ ki a ṣafikun ile-ikawe ti o ṣajọ si iṣẹ akanṣe wa.

Lati ṣe eyi, jẹ ki a mu imuse ti iṣẹ naa jade myfunc ni lọtọ .cpp-faili:

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

Lẹhinna a ṣalaye ile-ikawe lati ṣajọ (myfeature), eyi ti yoo ni ohun ti a gba ni igbesẹ ti tẹlẹ .cpp-faili. O han gbangba pe ile-ikawe tuntun nilo awọn akọle ti o wa tẹlẹ, ati pe lati le pese eyi, o le ati pe o yẹ ki o so mọ idi ti o wa tẹlẹ mylib. Pẹlupẹlu, asopọ laarin wọn jẹ ti gbogbo eniyan, eyi ti o tumọ si pe ohun gbogbo si eyiti afojusun yoo wa ni asopọ myfeature, yoo gba fifuye laifọwọyi ati ibi-afẹde mylib (diẹ ẹ sii nipa awọn ọna wiwun).

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

Nigbamii, a yoo rii daju pe ile-ikawe tuntun tun ti fi sii sori ẹrọ naa:

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

O yẹ ki o ṣe akiyesi pe fun idi naa myfeature, bi fun mylib a inagijẹ pẹlu ìpele ti a da Mylib::. Kanna ni a kọ fun awọn idi mejeeji nigbati o ba njade wọn jade fun fifi sori ẹrọ lori eto naa. Eyi jẹ ki o ṣee ṣe lati ṣiṣẹ ni iṣọkan pẹlu awọn ibi-afẹde fun eyikeyi eto abuda.

Lẹhin eyi, gbogbo ohun ti o ku ni lati sopọ awọn idanwo ẹyọkan pẹlu ile-ikawe tuntun (iṣẹ myfunc yọ kuro ninu akọle, nitorinaa o nilo lati sopọ):

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
 )

Awọn akọle (Mylib::mylibBayi o ko nilo lati sopọ lọtọ, nitori, bi a ti sọ tẹlẹ, wọn ti sopọ laifọwọyi pẹlu ile-ikawe (Mylib::myfeature).

Ati pe jẹ ki a ṣafikun awọn nuances meji lati rii daju awọn wiwọn agbegbe ni akiyesi ile-ikawe tuntun ti o de:

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

O le ṣafikun awọn ile-ikawe diẹ sii, awọn iṣẹ ṣiṣe, ati bẹbẹ lọ. Ko ṣe pataki bi wọn ṣe sopọ mọ ara wọn ni deede laarin iṣẹ akanṣe naa. Ohun pataki nikan ni awọn ibi-afẹde ni wiwo ti module wa, iyẹn ni, wọn duro jade.

Ṣẹgun

Bayi a ni boṣewa Àkọsílẹ modulu, ati awọn ti a le jẹ gaba lori wọn: kọ wọn sinu kan be ti eyikeyi complexity, fifi wọn sinu kan eto tabi sisopo wọn papo laarin kan nikan ijọ eto.

Fifi sori ẹrọ sinu eto

Ọkan ninu awọn aṣayan fun lilo module ni lati fi sori ẹrọ module wa sinu eto naa.

cmake --build путь/к/сборочной/директории --target install

Lẹhin iyẹn, o ti sopọ si iṣẹ akanṣe miiran nipa lilo aṣẹ naa find_package.

find_package(Mylib 1.0 REQUIRED)

Asopọ bi submodule

Aṣayan miiran ni lati so folda pọ pẹlu iṣẹ akanṣe wa si iṣẹ akanṣe miiran bi submodule nipa lilo aṣẹ naa add_subdirectory.

Lo

Awọn ọna abuda yatọ, ṣugbọn abajade jẹ kanna. Ni awọn ọran mejeeji, awọn ibi-afẹde yoo wa ninu iṣẹ akanṣe nipa lilo module wa Mylib::myfeature и Mylib::mylib, eyi ti o le ṣee lo, fun apẹẹrẹ, bi eleyi:

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

Ni pato ninu ọran wa, ile-ikawe naa Mylib::myfeature nilo lati sopọ nigbati o jẹ dandan lati sopọ pẹlu ile-ikawe naa libmyfeature. Ti awọn akọle to ba wa, lẹhinna o tọ lati lo ile-ikawe naa Mylib::mylib.

Awọn ibi-afẹde CMake le jẹ ẹtan, fun apẹẹrẹ, ti pinnu nikan lati firanṣẹ diẹ ninu awọn ohun-ini, awọn igbẹkẹle, ati bẹbẹ lọ. Ni akoko kanna, ṣiṣẹ pẹlu wọn waye ni ọna kanna.

Iyẹn ni ohun ti a nilo lati gba.

orisun: www.habr.com

Fi ọrọìwòye kun