C++ a me CMake - nā kaikunāne mau loa, ʻāpana II

C++ a me CMake - nā kaikunāne mau loa, ʻāpana II

Ma ka hapa mua Ua kamaʻilio kēia moʻolelo leʻaleʻa e pili ana i ka hoʻonohonoho ʻana i kahi waihona poʻomanaʻo i loko o ka CMake build system generator.

I kēia manawa e hoʻohui mākou i kahi waihona i hōʻuluʻulu ʻia iā ia, a kamaʻilio pū e pili ana i ka hoʻopili ʻana i nā modules me kekahi.

E like me mamua, hiki koke i ka poe hoomanawanui hele i ka waihona hou a hoopa aku i na mea a pau me kou mau lima iho.


Nā mea

  1. Māhele
  2. Lanakila

Māhele

ʻO ka mea mua a mākou e hana ai no ka hoʻokō ʻana i kā mākou pahuhopu kiʻekiʻe, ʻo ia ka hoʻokaʻawale ʻana i ka polokalamu a mākou e hoʻomohala ai i nā poloka ākea āpau i kūlike mai ka manaʻo o ka mea hoʻohana.

Ma ka ʻāpana mua, ua wehewehe ʻia kahi poloka maʻamau - kahi papahana me kahi waihona poʻo. I kēia manawa e hoʻohui i kahi waihona i hui ʻia i kā mākou papahana.

No ka hana ʻana i kēia, e wehe i ka hoʻokō o ka hana myfunc ma kahi kaʻawale .cpp-faila:

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

A laila wehewehe mākou i ka hale waihona puke e hōʻuluʻulu ʻia (myfeature), e pili ana i ka mea i loaʻa ma ka pae mua .cpp- waihona. Pono ka hale waihona puke hou i nā poʻomanaʻo i loaʻa, a i mea e hoʻolako ai i kēia, hiki a pono e hoʻopili ʻia i ke kumu e kū nei. mylib. Eia kekahi, ʻo ka pilina ma waena o lākou he lehulehu, ʻo ia hoʻi nā mea a pau e pili ai ka pahu hopu myfeature, e loaʻa koke i ka ukana a me ka pahuhopu mylib (ʻoi aku e pili ana i nā ʻano wili).

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

A laila, e hōʻoia mākou ua hoʻokomo ʻia ka waihona hou ma ka ʻōnaehana:

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

Pono e hoʻomaopopo ʻia no ke kumu myfeature, no ka mea mylib ua hana ʻia kahi inoa inoa me kahi prefix Mylib::. Ua kākau ʻia ka mea like no nā kumu ʻelua i ka wā e lawe aku ai iā lākou no ka hoʻokomo ʻana ma ka ʻōnaehana. Hiki i kēia ke hana like me nā pahuhopu no kēlā me kēia papahana pili.

Ma hope o kēia, ʻo nā mea a pau e hoʻopili ai i nā hoʻokolohua ʻāpana me ka waihona hou (function myfunc lawe ʻia mai ke poʻo inoa, no laila pono ʻoe e loulou):

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
 )

Nā poʻomanaʻo (Mylib::mylib) i kēia manawa ʻaʻole pono ʻoe e hoʻopili kaʻawale, no ka mea, e like me ka mea i haʻi mua ʻia, pili pū lākou me ka waihona (Mylib::myfeature).

A e hoʻohui i kekahi mau nuances e hōʻoia i nā ana uhi e noʻonoʻo ana i ka hale waihona puke hou i hiki mai:

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

Hiki iā ʻoe ke hoʻohui i nā hale waihona puke, nā mea hoʻokō, etc. ʻAʻole pili i ka pili pono ʻana o lākou kekahi i kekahi i loko o ka papahana. ʻO ka mea koʻikoʻi wale nō ʻo ia nā pahuhopu i ke kikowaena o kā mākou module, ʻo ia hoʻi, kū lākou i waho.

Lanakila

I kēia manawa, loaʻa iā mākou nā modula poloka maʻamau, a hiki iā mākou ke hoʻomalu iā lākou: e haku iā lākou i kahi ʻano paʻakikī, e hoʻokomo iā lākou i loko o kahi ʻōnaehana a i ʻole e hoʻopili iā lākou i loko o kahi ʻōnaehana hui hoʻokahi.

Hoʻokomo i loko o ka ʻōnaehana

ʻO kekahi o nā koho no ka hoʻohana ʻana i ka module e hoʻokomo i kā mākou module i loko o ka ʻōnaehana.

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

Ma hope o kēlā, pili ia i kekahi papahana ʻē aʻe e hoʻohana ana i ke kauoha find_package.

find_package(Mylib 1.0 REQUIRED)

Hoʻohui ma ke ʻano he submodule

ʻO kahi koho ʻē aʻe e hoʻopili i ka waihona me kā mākou papahana i kahi papahana ʻē aʻe ma ke ʻano he submodule e hoʻohana ana i ke kauoha add_subdirectory.

E hoʻohana

ʻOkoʻa nā ʻano hana hoʻopaʻa, akā like ka hopena. Ma nā hihia ʻelua, e loaʻa nā pahuhopu i ka papahana me ka hoʻohana ʻana i kā mākou module Mylib::myfeature и Mylib::mylib, hiki ke hoʻohana ʻia, no ka laʻana, e like me kēia:

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

Ma ko mākou hihia, ʻo ka waihona Mylib::myfeature pono e hoʻopili i ka wā e pono ai ke loulou me ka waihona libmyfeature. Inā lawa nā poʻomanaʻo, pono e hoʻohana i ka waihona Mylib::mylib.

Hiki ke maʻalahi nā pahuhopu CMake, no ka laʻana, i manaʻo ʻia e hoʻouna i kekahi mau waiwai, hilinaʻi, etc. I ka manawa like, hana like ka hana me lākou.

ʻO ia ka mea e pono ai mākou e loaʻa.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka