C++ เช…เชจเซ‡ CMake - เชญเชพเชˆเช“ เช•เชพเชฏเชฎ, เชญเชพเช— II

C++ เช…เชจเซ‡ CMake - เชญเชพเชˆเช“ เช•เชพเชฏเชฎ, เชญเชพเช— II

เช…เช—เชพเช‰เชจเชพ เชญเชพเช—เชฎเชพเช‚ เช† เชฎเชจเซ‹เชฐเช‚เชœเช• เชตเชพเชฐเซเชคเชพเช เชธเซ€เชฎเซ‡เช• เชฌเชฟเชฒเซเชก เชธเชฟเชธเซเชŸเชฎ เชœเชจเชฐเซ‡เชŸเชฐเชจเซ€ เช…เช‚เชฆเชฐ เชนเซ‡เชกเชฐ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เช—เซ‹เช เชตเชตเชพ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€.

เช† เชตเช–เชคเซ‡ เช†เชชเชฃเซ‡ เชคเซ‡เชฎเชพเช‚ เชเช• เชธเช‚เช•เชฒเชฟเชค เชชเซเชธเซเชคเช•เชพเชฒเชฏ เช‰เชฎเซ‡เชฐเซ€เชถเซเช‚, เช…เชจเซ‡ เชฎเซ‹เชกเซเชฏเซเชฒเซ‹เชจเซ‡ เชเช•เชฌเซ€เชœเชพ เชธเชพเชฅเซ‡ เชฒเชฟเช‚เช• เช•เชฐเชตเชพ เชตเชฟเชถเซ‡ เชชเชฃ เชตเชพเชค เช•เชฐเซ€เชถเซเช‚.

เชชเชนเซ‡เชฒเชพเชจเซ€ เชœเซ‡เชฎ, เชœเซ‡เช“ เช…เชงเซ€เชฐเชพ เช›เซ‡ เชคเซ‡เช“ เชคเชฐเชค เชœ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชชเชกเซ‡เชŸ เช•เชฐเซ‡เชฒ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชชเชฐ เชœเชพเช“ เช…เชจเซ‡ เชคเชฎเชพเชฐเชพ เชชเซ‹เชคเชพเชจเชพ เชนเชพเชฅเชฅเซ€ เชฆเชฐเซ‡เช• เชตเชธเซเชคเซเชจเซ‡ เชธเซเชชเชฐเซเชถ เช•เชฐเซ‹.


เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ

  1. เชตเชฟเชญเชพเชœเชจ
  2. เชœเซ€เชคเชตเซเช‚

เชตเชฟเชญเชพเชœเชจ

เช…เชฎเชพเชฐเซเช‚ เช‰เชšเซเช‚ เชงเซเชฏเซ‡เชฏ เชนเชพเช‚เชธเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช†เชชเชฃเซ‡ เชœเซ‡ เชชเซเชฐเชฅเชฎ เชตเชธเซเชคเซ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชคเซ‡ เช เช›เซ‡ เช•เซ‡ เช†เชชเชฃเซ‡ เชœเซ‡ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชตเชฟเช•เชธเชพเชตเซ€เช เช›เซ€เช เชคเซ‡เชจเซ‡ เชธเชพเชฐเซเชตเชคเซเชฐเชฟเช•, เช…เชฒเช— เชฌเซเชฒเซ‹เช•เซเชธเชฎเชพเช‚ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเชตเซเช‚ เชœเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€ เชธเชฎเชพเชจ เชนเซ‹เชฏ.

เชชเซเชฐเชฅเชฎ เชญเชพเช—เชฎเชพเช‚, เช†เชตเชพ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชฌเซเชฒเซ‹เช•เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚ - เชนเซ‡เชกเชฐ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เชธเชพเชฅเซ‡เชจเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ. เชนเชตเซ‡ เชšเชพเชฒเซ‹ เช†เชชเชฃเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชเช• เชธเช‚เช•เชฒเชฟเชค เชชเซเชธเซเชคเช•เชพเชฒเชฏ เช‰เชฎเซ‡เชฐเซ€เช.

เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชšเชพเชฒเซ‹ เชซเช‚เช•เซเชถเชจเชจเซ‹ เช…เชฎเชฒ เช•เชฐเซ€เช 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::. เชธเชฟเชธเซเชŸเชฎ เชชเชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชจเชฟเช•เชพเชธ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชฌเช‚เชจเซ‡ เชนเซ‡เชคเซเช“ เชฎเชพเชŸเซ‡ เชธเชฎเชพเชจ เชฒเช–เชพเชฏเซ‡เชฒ เช›เซ‡. เช†เชจเชพเชฅเซ€ เช•เซ‹เชˆเชชเชฃ เชฎเชพเชŸเซ‡ เชงเซเชฏเซ‡เชฏเซ‹ เชธเชพเชฅเซ‡ เชธเชฎเชพเชจ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซเช‚ เชถเช•เซเชฏ เชฌเชจเซ‡ เช›เซ‡ เชฌเช‚เชงเชจเช•เชฐเซเชคเชพ เชฏเซ‹เชœเชจเชพ.

เช† เชชเช›เซ€, เชœเซ‡ เชฌเชพเช•เซ€ เชฐเชนเซ‡ เช›เซ‡ เชคเซ‡ เชเช•เชฎ เชชเชฐเซ€เช•เซเชทเชฃเซ‹เชจเซ‡ เชจเชตเซ€ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ (เช•เชพเชฐเซเชฏ 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
     )

เชคเชฎเซ‡ เชตเชงเซ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เช“, เชเช•เซเชเชฟเช•เซเชฏเซเชŸเซ‡เชฌเชฒ เชตเช—เซ‡เชฐเซ‡ เช‰เชฎเซ‡เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชคเซ‡เช“ เชเช•เชฌเซ€เชœเชพ เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒเชพ เช›เซ‡ เชคเซ‡เชจเชพเชฅเซ€ เช•เซ‹เชˆ เชซเชฐเช• เชชเชกเชคเซ‹ เชจเชฅเซ€. เชเช•เชฎเชพเชคเซเชฐ เชฎเชนเชคเซเชตเชจเซ€ เชฌเชพเชฌเชค เช เช›เซ‡ เช•เซ‡ เช•เชฏเชพ เชฒเช•เซเชทเซเชฏเซ‹ เช†เชชเชฃเชพ เชฎเซ‹เชกเซเชฏเซเชฒเชจเซเช‚ เช‡เชจเซเชŸเชฐเชซเซ‡เชธ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡, เชคเซ‡เช“ เชšเซ‹เช‚เชŸเซ€ เชœเชพเชฏ เช›เซ‡.

เชœเซ€เชคเชตเซเช‚

เชนเชตเซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชฌเซเชฒเซ‹เช• เชฎเซ‹เชกเซเชฏเซเชฒเซ‹ เช›เซ‡, เช…เชจเซ‡ เช…เชฎเซ‡ เชคเซ‡เชฎเชจเชพ เชชเชฐ เชชเซเชฐเชญเซเชคเซเชต เชฎเซ‡เชณเชตเซ€ เชถเช•เซ€เช เช›เซ€เช: เชคเซ‡เชฎเชจเซ‡ เช•เซ‹เชˆเชชเชฃ เชœเชŸเชฟเชฒเชคเชพเชจเชพ เชฌเช‚เชงเชพเชฐเชฃเชฎเชพเช‚ เช•เช‚เชชเซ‹เช เช•เชฐเซ‹, เชคเซ‡เชฎเชจเซ‡ เชธเชฟเชธเซเชŸเชฎเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹ เช…เชฅเชตเชพ เชคเซ‡เชฎเชจเซ‡ เชเช• เชœ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชธเชฟเชธเซเชŸเชฎเชฎเชพเช‚ เชเช•เชธเชพเชฅเซ‡ เชฒเชฟเช‚เช• เช•เชฐเซ‹.

เชธเชฟเชธเซเชŸเชฎเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ

เชฎเซ‹เชกเซเชฏเซเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‹ เชเช• เชตเชฟเช•เชฒเซเชช เช เช›เซ‡ เช•เซ‡ เช…เชฎเชพเชฐเชพ เชฎเซ‹เชกเซเชฏเซเชฒเชจเซ‡ เชธเชฟเชธเซเชŸเชฎเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเซเช‚.

cmake --build ะฟัƒั‚ัŒ/ะบ/ัะฑะพั€ะพั‡ะฝะพะน/ะดะธั€ะตะบั‚ะพั€ะธะธ --target install

เชคเซ‡ เชชเช›เซ€, เชคเซ‡ เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เซ‹เชˆเชชเชฃ เช…เชจเซเชฏ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒ เช›เซ‡ find_package.

find_package(Mylib 1.0 REQUIRED)

เชธเชฌเชฎเซ‹เชกเซเชฏเซเชฒ เชคเชฐเซ€เช•เซ‡ เชœเซ‹เชกเชพเชฃ

เชฌเซ€เชœเซ‹ เชตเชฟเช•เชฒเซเชช เช เช›เซ‡ เช•เซ‡ เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเชฌเชฎเซ‹เชกเซเชฏเซเชฒ เชคเชฐเซ€เช•เซ‡ เช…เชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเชพเชฅเซ‡เชจเชพ เชซเซ‹เชฒเซเชกเชฐเชจเซ‡ เชฌเซ€เชœเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเชพเชฅเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเชตเซเช‚ add_subdirectory.

เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹

เชฌเช‚เชงเชจเช•เชฐเซเชคเชพ เชชเชฆเซเชงเชคเชฟเช“ เช…เชฒเช— เช›เซ‡, เชชเชฐเช‚เชคเซ เชชเชฐเชฟเชฃเชพเชฎ เชธเชฎเชพเชจ เช›เซ‡. เชฌเช‚เชจเซ‡ เช•เชฟเชธเซเชธเชพเช“เชฎเชพเช‚, เช…เชฎเชพเชฐเชพ เชฎเซ‹เชกเซเชฏเซเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชฒเช•เซเชทเซเชฏเซ‹ เช‰เชชเชฒเชฌเซเชง เชฅเชถเซ‡ 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 เชฒเช•เซเชทเซเชฏเซ‹ เชฎเซเชถเซเช•เซ‡เชฒ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฎเชพเชคเซเชฐ เช…เชฎเซเช• เชชเซเชฐเซ‹เชชเชฐเซเชŸเซ€เช, เชกเชฟเชชเซ‡เชจเซเชกเชจเซเชธเซ€ เชตเช—เซ‡เชฐเซ‡เชจเซ‡ เชซเซ‹เชฐเชตเชฐเซเชก เช•เชฐเชตเชพเชจเชพ เชนเซ‡เชคเซเชฅเซ€. เชคเซ‡ เชœ เชธเชฎเชฏเซ‡, เชคเซ‡เชฎเชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช เชœ เชฐเซ€เชคเซ‡ เชฅเชพเชฏ เช›เซ‡.

เชคเซ‡ เชœ เช…เชฎเชพเชฐเซ‡ เชฎเซ‡เชณเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเชคเซ€.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹