C++ နဟင့် CMake - ထာဝရညီအစ်ကိုမျာသ အပိုင်သ II

C++ နဟင့် CMake - ထာဝရညီအစ်ကိုမျာသ အပိုင်သ II

ယခင်အပိုင်သ၌ ကပျော်စရာဇာတ်လမ်သသည် CMake တည်ဆောက်မဟုစနစ် ဂျင်နရေတာအတလင်သ ခေါင်သစီသစာကဌည့်တိုက်တစ်ခုကို စုစည်သခဌင်သအကဌောင်သ ပဌောထာသသည်။

ကတစ်ကဌိမ်တလင် ကျလန်ုပ်တို့သည် ၎င်သတလင် စုစည်သထာသသော စာကဌည့်တိုက်တစ်ခုကို ပေါင်သထည့်မည်ဖဌစ်ပဌီသ မော်ဂျူသမျာသကို တစ်ခုနဟင့်တစ်ခု ချိတ်ဆက်ခဌင်သအကဌောင်သလည်သ ဆလေသနလေသပါမည်။

အရင်ကလို စိတ်မရဟည်တဲ့သူတလေ ချက်ချင်သလုပ်လို့ရတယ်။ အပ်ဒိတ်လုပ်ထာသသော သိုလဟောင်ခန်သသို့ သလာသပါ။ အရာအာသလုံသကို မင်သလက်နဲ့ထိလိုက်ပါ။


အကဌောင်သအရာ

  1. ဝေ
  2. အောင်နိုင်

ဝေ

ကျလန်ုပ်တို့၏မဌင့်မဌတ်သောပန်သတိုင်ကိုရရဟိရန် ကျလန်ုပ်တို့လုပ်ဆောင်ရမည့် ပထမဆုံသအရာမဟာ ကျလန်ုပ်တို့ထုတ်လုပ်သည့်ဆော့ဖ်ဝဲလ်ကို အသုံသပဌုသူ၏အမဌင်နဟင့် တစ်ပဌေသညီဖဌစ်သော universal, isolated blocks မျာသအဖဌစ် ပိုင်သခဌာသရန်ဖဌစ်သည်။

ပထမအပိုင်သတလင်၊ ထိုကဲ့သို့သော စံဘလောက်တစ်ခုကို ဖော်ပဌခဲ့သည် - ခေါင်သစီသစာကဌည့်တိုက်ပါသည့် ပရောဂျက်တစ်ခု။ ယခု ကျလန်ုပ်တို့၏ ပရောဂျက်တလင် စုစည်သထာသသော စာကဌည့်တိုက်တစ်ခုကို ထည့်လိုက်ကဌပါစို့။

ဒါကိုလုပ်ဖို့၊ လုပ်ဆောင်ချက်ကို အကောင်အထည်ဖော်ကဌည့်ရအောင် myfunc သီသခဌာသ၌ .cpp- ဖိုင်-

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

ထို့နောက် စုစည်သရန် စာကဌည့်တိုက်ကို ကျလန်ုပ်တို့ သတ်မဟတ်သည် (myfeature) ယခင်အဆင့်တလင် ရရဟိခဲ့သည့်အရာမျာသ ပါဝင်မည်ဖဌစ်သည်။ .cpp- ဖိုင်။ စာကဌည့်တိုက်အသစ်သည် ရဟိပဌီသသာသ ခေါင်သစီသမျာသကို သိသာထင်ရဟာသစလာ လိုအပ်ပဌီသ ၎င်သကို ဖဌည့်ဆည်သရန်အတလက် ၎င်သသည် ရဟိပဌီသသာသ ရည်ရလယ်ချက်နဟင့် ချိတ်ဆက်နိုင်သည် mylib. ထို့အပဌင် ၎င်သတို့ကဌာသရဟိ ချိတ်ဆက်မဟုသည် အမျာသသူငဟာဖဌစ်သည်၊ ဆိုလိုသည်မဟာ ပစ်မဟတ်သို့ ချိတ်ဆက်မည့် အရာအာသလုံသကို ဆိုလိုသည်။ myfeature, အလိုအလျောက်ဝန်နဟင့်ပစ်မဟတ်လက်ခံရရဟိလိမ့်မည်။ 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)
+

ထို့နောက်၊ စာကဌည့်တိုက်အသစ်ကိုလည်သ စနစ်တလင် ထည့်သလင်သထာသကဌောင်သ သေချာစေပါမည်-

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

ရည်ရလယ်ချက်အတလက် သတိပဌုသင့်သည်။ myfeatureအဘို့အဖဌစ် mylib ရဟေ့ဆက်တလဲပါသော နံမည်တစ်ခုကို ဖန်တီသထာသသည်။ Mylib::. စနစ်တလင် ထည့်သလင်သရန်အတလက် ၎င်သတို့ကို တင်ပို့သည့်အခါ ရည်ရလယ်ချက်နဟစ်ခုလုံသအတလက် အလာသတူရေသသာသထာသသည်။ ၎င်သသည် မည်သည့်အတလက်မဆို ရည်မဟန်သချက်မျာသနဟင့် ညီတူညီမျဟ လုပ်ဆောင်နိုင်စေပါသည်။ binding အစီအစဉ်.

ယင်သနောက်တလင်၊ ကျန်ရဟိသည့်အရာအာသလုံသသည် ယူနစ်စမ်သသပ်မဟုမျာသကို စာကဌည့်တိုက်အသစ်နဟင့် ချိတ်ဆက်ရန်ဖဌစ်သည် (လုပ်ဆောင်ချက် myfunc ခေါင်သစဉ်မဟ ထုတ်နဟုတ်ထာသသောကဌောင့် ယခုလင့်ခ်ချိတ်ရန် လိုအပ်ပါသည်။)

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
 )

ခေါင်သစဉ်မျာသ (Mylib::mylib) ယခုသင် သီသခဌာသချိတ်ဆက်ရန် မလိုအပ်ပါ၊ အဘယ်ကဌောင့်ဆိုသော် ဖော်ပဌထာသပဌီသဖဌစ်သည့်အတိုင်သ ၎င်သတို့သည် စာကဌည့်တိုက်နဟင့် အလိုအလျောက်ချိတ်ဆက်ထာသသောကဌောင့် (Mylib::myfeature).

အသစ်ရောက်ရဟိလာသော စာကဌည့်တိုက်ကို ထည့်သလင်သစဉ်သစာသကာ လလဟမ်သခဌုံတိုင်သတာမဟုမျာသကို သေချာစေရန် ကလဲပဌာသချက်အချို့ကို ထည့်လိုက်ကဌပါစို့။

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

သင်သည် နောက်ထပ်စာကဌည့်တိုက်မျာသ၊ စီမံလုပ်ဆောင်နိုင်သော အရာမျာသ စသည်တို့ကို ထည့်နိုင်သည်။ ပရောဂျက်အတလင်သ ၎င်သတို့အချင်သချင်သ မည်ကဲ့သို့ အတိအကျ ချိတ်ဆက်နေသည်မဟာ အရေသမကဌီသပါ။ တစ်ခုတည်သသောအရေသကဌီသသည့်အချက်မဟာ မည်သည့်ပစ်မဟတ်မျာသသည် ကျလန်ုပ်တို့၏ module ၏ interface ဖဌစ်သည်၊ ဆိုလိုသည်မဟာ ၎င်သတို့သည် ထလက်နေခဌင်သဖဌစ်သည်။

အောင်နိုင်

ယခု ကျလန်ုပ်တို့တလင် စံဘလောက် module မျာသရဟိပဌီသ ၎င်သတို့ကို လလဟမ်သမိုသထာသနိုင်သည်- ၎င်သတို့ကို ရဟုပ်ထလေသမဟုရဟိသော ဖလဲ့စည်သပုံတစ်ခုအဖဌစ် ပေါင်သစပ်ကာ ၎င်သတို့ကို စနစ်တစ်ခုအဖဌစ် ထည့်သလင်သခဌင်သ သို့မဟုတ် စည်သဝေသပလဲစနစ်တစ်ခုအတလင်သ ၎င်သတို့ကို ချိတ်ဆက်ခဌင်သ ဖဌစ်သည်။

စနစ်ကို တပ်ဆင်ခဌင်သ။

module ကိုအသုံသပဌုရန်ရလေသချယ်စရာမျာသထဲမဟတစ်ခုမဟာကျလန်ုပ်တို့၏ module ကိုစနစ်ထဲသို့ထည့်သလင်သရန်ဖဌစ်သည်။

cmake --build путь/к/сбПрПчМПй/ЎОректПрОО --target install

၎င်သနောက်၊ ၎င်သသည် command ကိုအသုံသပဌု၍ အခဌာသပရောဂျက်မျာသနဟင့်ချိတ်ဆက်ထာသသည်။ find_package.

find_package(Mylib 1.0 REQUIRED)

submodule အဖဌစ် ချိတ်ဆက်မဟု

နောက်ထပ်ရလေသချယ်စရာမဟာ command ကိုအသုံသပဌု၍ submodule အဖဌစ်ကျလန်ုပ်တို့၏ပရောဂျက်နဟင့်ဖိုင်တလဲကိုချိတ်ဆက်ရန်ဖဌစ်သည်။ add_subdirectory.

၏အသုံသပဌုမဟု

ပေါင်သစပ်နည်သတလေက မတူပေမယ့် ရလဒ်ကတော့ အတူတူပါပဲ။ ဖဌစ်ရပ်နဟစ်ခုစလုံသတလင် ကျလန်ုပ်တို့၏ module ကိုအသုံသပဌု၍ ပရောဂျက်တလင် ပန်သတိုင်မျာသရရဟိနိုင်မည်ဖဌစ်သည်။ Mylib::myfeature О Mylib::mylibဥပမာအာသဖဌင့်၊ ကကဲ့သို့အသုံသပဌုနိုင်သော၊

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

အတိအကျပဌောရရင် စာကဌည့်တိုက်ပေါ့။ Mylib::myfeature စာကဌည့်တိုက်နဟင့် ချိတ်ဆက်ရန် လိုအပ်သောအခါတလင် ချိတ်ဆက်ရန် လိုအပ်သည်။ libmyfeature. ခေါင်သစီသအလုံအလောက်ရဟိလျဟင် စာကဌည့်တိုက်ကို သုံသသင့်သည်။ Mylib::mylib.

CMake ပစ်မဟတ်မျာသသည် အချို့သော ဂုဏ်သတ္တိမျာသ၊ မဟီခိုမဟုမျာသ၊ စသည်တို့ကို ပေသပို့ရန်သာ ရည်ရလယ်သည် ။ တစ်ချိန်တည်သမဟာပင် ၎င်သတို့နဟင့် လက်တလဲလုပ်ဆောင်ခဌင်သသည် တူညီသောနည်သလမ်သတစ်ခုဖဌစ်သည်။

အဲဒါရဖို့ ကျလန်တော်တို့ လိုအပ်တယ်။

source: www.habr.com

မဟတ်ချက် Add